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


93

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

我仅用来绘制图形的就是下面的简单代码。

data.plot()
grid('on')

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

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

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

有什么建议?

在此处输入图片说明


data.plot(grid="on")工作对我来说
马库斯

Answers:


102

您可能需要在通话中提供布尔arg,例如,使用ax.yaxis.grid(True)代替ax.yaxis.grid()。此外,由于您同时使用这两种方法,因此您可以将它们合并为ax.grid,这两种方法都可以使用,而不是对每个维度都使用一次。

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

那应该把你整理出来。


我尝试过,但是由于某种原因,它看起来还是和以前一样
Osmond Bishop

1
您正在使用交互式口译员吗?致电请确保已设置好网格plt.show()
2013年

我正在使用iPython。我尝试添加plt.show()不会有所作为。
Osmond Bishop

1
好吧,这很奇怪。您的ipython版本是什么,还可以尝试像这样运行它ipython --pylab,并plt.grid(True)立即执行-您看到网格了吗?
2013年

我尝试过plt.grid(True)同时得到垂直和水平网格线的空图,所以是的,为什么我的线图无法得到这个图,这很奇怪。我正在运行iPython的最新可用版本。
Osmond Bishop

57

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


6
myaxes.grid(which='x')没有工作对我来说与matplotlib 1.4.2版本......不能让which所有关键字的工作。但是,myaxes.xaxis.grid(True)做到了这一点,并且从概念上讲是更好的IMO。哦,不要忘记myaxes.set_axisbelow(True)将网格放在数据后面的有用方法。
travc 2014年

25

根据matplotlib文档Axesclass grid()方法的签名如下:

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

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

axis 可以是“两者”(默认),“ x”或“ y”,以控制绘制哪一组网格线。

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

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

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


6

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

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

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


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

1

仅适用于水平线

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

这工作

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.