You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.01 15:18:32