使垂直网格线出现在matplotlib中的折线图中

Osm*_*hop 83 python matplotlib pandas

我希望在我的绘图上同时获得水平和垂直网格线,但默认情况下只显示水平网格线.我pandas.DataFrame在python中使用一个sql查询来生成一个带有x轴日期的线图.我不确定为什么他们没有出现在日期,我试图寻找答案,但找不到.

我用来绘制图形的所有内容都是下面的简单代码.

data.plot()
grid('on')
Run Code Online (Sandbox Code Playgroud)

data是DataFrame,它包含sql查询中的日期和数据.

我也试过添加下面的代码,但我仍然得到相同的输出没有垂直网格线.

ax = plt.axes()        
ax.yaxis.grid() # horizontal lines
ax.xaxis.grid() # vertical lines
Run Code Online (Sandbox Code Playgroud)

有什么建议?

在此输入图像描述

wim*_*wim 90

您可能需要在调用中给出布尔arg,例如使用ax.yaxis.grid(True)而不是ax.yaxis.grid().此外,由于您同时使用它们,因此您可以将两者结合ax.grid使用,而不是对每个维度执行一次.

ax = plt.gca()
ax.grid(True)
Run Code Online (Sandbox Code Playgroud)

那应该是你排除.


小智 48

plt.gca().xaxis.grid(True) 事实证明是我的解决方案

  • 使用matplotlib版本1.4.2时,`myaxes.grid(='x')`对我来说不起作用...无法使`which`关键字起作用.然而,`myaxes.xaxis.grid(True)`做了这个伎俩,在概念上是更好的IMO.哦,不要忘记有用的`myaxes.set_axisbelow(True)`方法将网格放在数据后面. (6认同)

jdh*_*hao 17

根据matplotlib文档,Axesgrid()方法的签名如下:

Axes.grid(b =无,其中'主要',轴='两个',**kwargs)
打开或关闭轴网格.

which 可以是"主要"(默认),"次要"或"两者"来控制是否影响主要的刻度网格,次要刻度网格或两者.

axis 可以是'both'(默认),'x'或'y'来控制绘制哪组网格线.

因此,为了显示x轴和y轴的网格线,我们可以使用以下代码:

ax = plt.gca()
ax.grid(which='major', axis='both', linestyle='--')
Run Code Online (Sandbox Code Playgroud)

这种方法使我们能够更好地控制网格线的显示内容.


Lor*_*ang 8

也许这可以解决问题: matplotlib,在绘图上定义网格的大小

ax.grid(True, which='both')
Run Code Online (Sandbox Code Playgroud)

事实是网格正在工作,但在 00:00 只有一个 v-grid,其他没有网格。我遇到了同样的问题,在许多天中,11 月 1 日只有一个网格。


Dar*_*ark 5

简短回答(阅读下文了解更多信息):

ax.grid(axis='both', which='both')
Run Code Online (Sandbox Code Playgroud)

在此处输入图片说明

你所做的是正确的,它应该可以工作。

但是,由于您示例中的X轴是DateTime轴,因此主要刻度线(最有可能)仅出现在 X 轴的两端。其他可见的刻度线是次要刻度线。

ax.grid()默认情况下,该方法在主要刻度线上绘制网格线。因此,您的情节中没有任何内容。

使用下面的代码突出显示刻度线。Majors 为蓝色,Minor 为红色。

ax.tick_params(which='both', width=3)
ax.tick_params(which='major', length=20, color='b')
ax.tick_params(which='minor', length=10, color='r')
Run Code Online (Sandbox Code Playgroud)

现在要强制网格线也出现在次要刻度线上,请将 传递which='minor'给方法:

ax.grid(b=True, which='minor', axis='x', color='#000000', linestyle='--')
Run Code Online (Sandbox Code Playgroud)

或简单地用于which='both'绘制主要和次要网格线。这是一条更优雅的网格线:

ax.grid(b=True, which='minor', axis='both', color='#888888', linestyle='--')
ax.grid(b=True, which='major', axis='both', color='#000000', linestyle='-')
Run Code Online (Sandbox Code Playgroud)