我想在我的绘图上同时获得水平和垂直网格线,但默认情况下只显示水平网格线。我在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
有什么建议吗?
答案 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 documentation,Axes
类grid()
方法的签名如下:
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')
您所做的是正确的,应该可以。
但是,由于示例中的 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
这有效