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

时间:2013-04-18 04:17:10

标签: python matplotlib pandas

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

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

data.plot()
grid('on')

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

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

ax = plt.axes()        
ax.yaxis.grid() # horizontal lines
ax.xaxis.grid() # vertical lines

有什么建议吗?

enter image description here

6 个答案:

答案 0 :(得分:76)

您可能需要在通话中提供布尔值arg,例如使用ax.yaxis.grid(True)代替ax.yaxis.grid()。此外,由于您同时使用它们,因此您可以将ax.grid组合到两个版本中,而不是对每个维度执行一次。

ax = plt.gca()
ax.grid(True)

那会让你感到厌烦。

答案 1 :(得分:42)

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

答案 2 :(得分:12)

According to matplotlib documentationAxesgrid()方法的签名如下:

  

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

     

which可以是“主要”(默认),“次要”或“两者”来控制是否   主要的刻度网格,次要刻度网格或两者都受到影响。

     

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

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

ax = plt.gca()
ax.grid(which='major', axis='both', linestyle='--')

这种方法可以让我们更好地控制网格线的显示内容。

答案 3 :(得分:4)

也许这可以解决问题: matplotlib, define size of a grid on a plot

ax.grid(True, which='both')

事实是网格正在运行,但在00:00只有一个v网格而在其他网格中没有网格。我遇到了同样的问题,即11月1日中只有一个网格在很多天内。

答案 4 :(得分:3)

简短答案(有关更多信息,请参见下文)

ax.grid(axis='both', which='both')

enter image description here

您所做的是正确的,应该可以。

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

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

使用下面的代码突出显示刻度线。专业将是蓝色,未成年人是红色。

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')

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

ax.grid(b=True, which='minor', axis='x', color='#000000', linestyle='--')

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

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

答案 5 :(得分:0)

仅适用于水平线

ax = plt.axes()        
ax.yaxis.grid() # horizontal lines

这有效