Matplotlib散点图配置问题:Y轴刻度、次网格及X轴显示调整
解决方案
下面是修改后的代码,完全满足你的三个需求:
import numpy as np import matplotlib.pyplot as plt from matplotlib.ticker import MultipleLocator, LogLocator plt.style.use("dark_background") plt.yscale("log") plt.grid(which='major', linestyle='-') # 保留主网格样式 plt.grid(which='minor', linestyle=':', color='gray') # 添加灰色次网格 plt.xlim(1910, 2024) plt.ylim(1, 1000000000000) # ---------------------- 处理Y轴需求 ---------------------- ax = plt.gca() # 设置Y轴主刻度为每个10的幂次 ax.yaxis.set_major_locator(LogLocator(base=10, subs=[1.0])) # 设置Y轴灰色次刻度(覆盖2-9倍的10的幂次区间) ax.yaxis.set_minor_locator(LogLocator(base=10, subs=[2,3,4,5,6,7,8,9])) ax.tick_params(axis='y', which='minor', color='gray') # 次刻度颜色设为灰色 # ---------------------- 处理X轴需求 ---------------------- # X轴仅显示2024,关闭所有次刻度 plt.xticks([2024]) ax.xaxis.set_minor_locator(plt.NullLocator()) year = [1920, 1924] transistors = [8, 120] names = ["placeholder", "placeholder"] plt.title("Moore's law in 2024") plt.xlabel("Year", fontsize=15) plt.ylabel("# of transistors (log)", rotation=0, labelpad=50) plt.scatter(year, transistors, c="darkred", marker=".", s=25) for i in range(len(year)): plt.annotate(names[i], (year[i], transistors[i] - 0.2)) plt.show()
关键改动说明:
- Y轴主刻度:用
LogLocator(base=10, subs=[1.0])强制主刻度仅显示10的整数次幂(1、10、100……1e12),替代默认的间隔显示逻辑。 - Y轴次刻度与次网格:通过
LogLocator设置subs=[2,3,4,5,6,7,8,9]生成2-9倍10幂次的次刻度,同时用grid(which='minor', color='gray')添加灰色次网格,tick_params同步设置次刻度颜色为灰色。 - X轴设置:直接将
xticks指定为[2024]只显示目标刻度,再用NullLocator()移除X轴所有次刻度。
内容的提问来源于stack exchange,提问作者Aggressive Combo
相关产品推荐
相关产品推荐

