matplotlib 配置网格线

oxf4rvwz  于 2023-10-24  发布在  其他
关注(0)|答案(2)|浏览(97)

考虑下图。

此图像已使用以下代码设置。

plt.rc('text', usetex=True)
  plt.rc('font', family='serif')
  fig, ax = plt.subplots()
  
  ax.set_xlabel("Run Number", fontsize=25)
  
  plt.grid(True, linestyle='--')
  plt.tick_params(labelsize=20)
  ax.set_xticklabels(map(str,range(number_of_runs)))
  ax.minorticks_on()

  ax.set_ylim([0.75,1.75])

为了清楚起见,我没有包括实际生成绘图数据的代码。
与上图不同的是,我想画一条垂直于X轴的网格线,穿过每个橙子(因此也是蓝色)点。如何做到这一点?在我的代码中,连续的橙子和蓝色点的x坐标形成了相同的算术级数。
我还注意到,刻度编号1,2,.对于我的应用程序来说是错误的。相反,我希望每个连续的网格线,我在上一步中要求垂直于X轴,沿着X轴从1开始顺序编号。我如何配置Xtick标记?

pexxcrt2

pexxcrt21#

网格线穿过xticks(或yticks)。您需要正确定义xticks,以便网格线穿过数据点(点)
示例如下:

import matplotlib.pyplot as plt
fig, ax = plt.subplots()
number_of_runs = range(1,10)    # use your actual number_of_runs
ax.set_xticks(number_of_runs, minor=False)
ax.xaxis.grid(True, which='major')

如果你只想有垂直线,添加这个:

ax.yaxis.grid(False, which='major')

类似问题here

x3naxklr

x3naxklr2#

您应该使用对ax.set_xticks的调用指定网格的确切位置,然后使用对ax.set_xticklabels的调用指定轴上所需的确切数字。
我在下面的例子中绘制了两个随机数组:

plt.rc('text', usetex=True)
plt.rc('font', family='serif')

y1 = np.random.random(10)
y2 = np.random.random(10)

fig, ax = plt.subplots(ncols=2, figsize=(8, 3))

# equivalent to your figure
ax[0].plot(y1, 'o-') 
ax[0].plot(y2, 'o-')
ax[0].grid(True, linestyle='--')
ax[0].set_title('Before')

# hopefully what you want
ax[1].plot(y1, 'o-')
ax[1].plot(y2, 'o-')
ax[1].set_title('After')
ax[1].set_xticks(range(0, len(y1)))
ax[1].set_xticklabels(range(1, len(y1)+1))
ax[1].grid(True, linestyle='--')

plt.show()

这是输出:

注意:看你的图,看起来实际的x轴不是整数,但是你想要从1开始的整数,可能最好的方法是只传入y轴数据数组作为plot命令的参数(plt.plot(y)而不是plt.plot(x, y),就像我上面做的那样。你应该决定这是否适合你的情况。

相关问题