配置网格线

smi*_*dha 4 python matplotlib gridlines

考虑下图。

在此输入图像描述

该图像是使用以下代码设置的。

  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])
Run Code Online (Sandbox Code Playgroud)

为了清楚起见,我没有包含实际生成绘图数据的代码。

与上图不同,我想通过每个橙色(因此是蓝色)点绘制垂直于 X 轴的网格线。我该怎么做呢?连续的橙色和蓝色点的 x 坐标在我的代码中形成相同的算术级数。

我还注意到编号为 1,2,... 的刻度数字对于我的应用程序来说是错误的。相反,我希望每条连续的网格线(我在上一步中要求垂直于 X 轴)沿着 X 轴从 1 开始按顺序编号。如何为此配置 Xtick 标记?

Rob*_*byc 6

网格线与 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')
Run Code Online (Sandbox Code Playgroud)

如果您只想有垂直线,请添加以下内容:

ax.yaxis.grid(False, which='major')
Run Code Online (Sandbox Code Playgroud)

类似的问题在这里


krm*_*krm 5

您应该使用调用来指定您想要网格的确切位置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()
Run Code Online (Sandbox Code Playgroud)

这是输出: 在此输入图像描述

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