105

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

我用来绘制图表的只是下面的简单代码。

data.plot()
grid('on')

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

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

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

有什么建议么?

在此处输入图像描述

4

7 回答 7

109

您可能需要在调用中提供布尔参数,例如使用ax.yaxis.grid(True)而不是ax.yaxis.grid(). 此外,由于您同时使用它们,因此您可以组合成ax.grid,这对两者都有效,而不是对每个维度都执行一次。

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

那应该让你解决。

于 2013-04-18T04:19:16.840 回答
66

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

于 2014-09-12T02:23:47.900 回答
31

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

Axes.grid(b=None, which='major', axis='both', **kwargs)
打开或关闭轴网格。

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

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

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

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

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

于 2018-01-03T12:51:34.437 回答
8

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

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

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

于 2016-11-16T03:07:03.953 回答
7

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

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='-')
于 2020-03-31T13:29:09.393 回答
4

仅适用于水平线

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

这有效

于 2019-07-10T08:46:33.487 回答
0

尝试:

plt.grid(True)

这会打开日期系列的水平和垂直网格,主要刻度线在正确的位置。

使用 Python3/MatPlotLib 3.4.3

于 2021-12-30T01:40:17.597 回答