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

matplotlib绘图对数x轴范围扩至1e8后网格消失问题咨询

解决方案

你的问题由两个常见原因导致,按如下步骤修改即可:

  • 首先修正plt.grid语句里的转义字符错误:你代码里的"是HTML格式的引号转义符,Python无法识别,会导致which="both"参数不生效,网格配置失效。
  • 其次手动配置对数轴的刻度定位器:当x轴范围跨度超过1e7时,matplotlib默认会自动隐藏次要对数网格避免显示过密,需要手动指定Locator强制显示所有对数刻度的网格。
  • 可选优化:用np.logspace生成对数间隔的x坐标值,比线性range生成的点在对数轴上分布更均匀,曲线更平滑,同时向量化计算y值也比循环遍历效率更高。

修正后可直接运行的完整代码

import matplotlib.pyplot as plt
import numpy as np
from matplotlib.ticker import LogLocator

# Raw data:
omega_1 = [622.0353454107791, 2043.480357454017, 4823.098705497194, 10103.361973944775, 21186.900855809567, 44151.94315355095, 86563.44397701316, 200075.46973651956, 451528.5457298466, 680657.4643267646, 1994735.4058409175, 4813736.759389496, 7052058.693219152] # in rad/sec
Phase_1_in_Rad_flipped = [1.548107046524, 1.569050997548, 1.565560339044, 1.567305668296, 1.541125729516, 1.40499004786, 1.23045712266, 0.97738438112, 0.577703982412, 0.380481776936, 0.1514945790736, 0.019198621772, -0.042411500823600005]

# 用logspace生成对数间隔的x值,范围从1到1e8,共1000个点,分布更均匀
omega_value_list = np.logspace(0, 8, 1000)
# 直接向量化计算y值,不需要循环,效率更高
y_values_Phasenverschiebung = np.arctan(1/(omega_value_list * 75 * 0.0000000045))

plt.plot(omega_1, Phase_1_in_Rad_flipped, marker='o', label='Verbundene, gemessenen Punkte')
plt.plot(omega_value_list, y_values_Phasenverschiebung, label='Theoretische Erwartungen')
plt.xscale('log')
plt.ylabel('Phasenverschiebung [rad]')
plt.xlabel('Kreisfrequentz [rad/s]')

# 手动配置x轴对数刻度定位器,强制显示主次网格
ax = plt.gca()
ax.xaxis.set_major_locator(LogLocator(base=10.0, numticks=15))
ax.xaxis.set_minor_locator(LogLocator(base=10.0, subs=np.arange(2, 10)*0.1, numticks=15))
plt.grid(True, which="both")

plt.legend()
plt.show()

内容的提问来源于stack exchange,提问作者Mark

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 05:54:01