如何只绘制水平网格(使用pandas plot + pyplot)

fhg3lkii  于 2023-04-04  发布在  其他
关注(0)|答案(2)|浏览(129)

我想只得到水平网格使用Pandas图。
pandas的集成参数只有grid=Truegrid=False,因此我尝试使用matplotlib pyplot,更改轴参数,具体如下代码:

import pandas as pd
import matplotlib.pyplot as plt
fig = plt.figure()
ax2 = plt.subplot()
ax2.grid(axis='x')
df.plot(kind='bar',ax=ax2, fontsize=10, sort_columns=True)
plt.show(fig)

但是我没有得到网格,既不是水平的也不是垂直的。是Pandas覆盖了坐标轴吗?还是我做错了什么?

ruyhziif

ruyhziif1#

尝试在绘制DataFrame后设置网格。另外,要获得水平网格,需要使用ax2.grid(axis='y')。下面是使用示例DataFrame的答案。
我通过使用subplots重新构造了ax2的定义。

import pandas as pd
import matplotlib.pyplot as plt

df = pd.DataFrame({'lab':['A', 'B', 'C'], 'val':[10, 30, 20]})

fig, ax2 = plt.subplots()

df.plot(kind='bar',ax=ax2, fontsize=10, sort_columns=True)
ax2.grid(axis='y')
plt.show()

或者,您也可以执行以下操作:直接使用从DataFrame图返回的axis对象来打开水平网格

fig = plt.figure()

ax2 = df.plot(kind='bar', fontsize=10, sort_columns=True)
ax2.grid(axis='y')

第三个选项,@ayorgo在评论中建议将两个命令链接为

df.plot(kind='bar',ax=ax2, fontsize=10, sort_columns=True).grid(axis='y')

w46czmvw

w46czmvw2#

另一种选择:Matplotlib的plot(和bar)默认情况下不绘制垂直网格。

plt.bar(df['lab'], df['val'], width=0.4)

或者使用面向对象的方法:

fig, ax = plt.subplots()
ax.bar(df['lab'], df['val'], width=0.5)   # plot bars
ax.tick_params(labelsize=10)              # set ticklabel size to 10
xmin, xmax = ax.get_xlim()
# pad bars on both sides a bit and draw the grid behind the bars
ax.set(xlim=(xmin-0.25, xmax+0.25), axisbelow=True);

相关问题