使用带有secondary_y的Seaborn + Pandas绘图时如何摆脱网格线

Art*_*örk 26 python plot matplotlib pandas seaborn

我正在绘制两个带有seaborn导入的Pandas的数据系列.理想情况下,我希望在左右y轴之间共享水平网格线,但我觉得这很难做到.

作为妥协,我想一起删除网格线.但是,以下代码会生成辅助y轴的水平网格线.

import pandas as pd
import numpy as np
import seaborn as sns


data = pd.DataFrame(np.cumsum(np.random.normal(size=(100,2)),axis=0),columns=['A','B'])
data.plot(secondary_y=['B'],grid=False)
Run Code Online (Sandbox Code Playgroud)

我想摆脱的网格线

Lua*_*yen 32

绘图后可以取出Axes对象,并.grid(False)在两个轴上执行.

# Gets the axes object out after plotting
ax = data.plot(...)

# Turns off grid on the left Axis.
ax.grid(False)

# Turns off grid on the secondary (right) Axis.
ax.right_ax(False)
Run Code Online (Sandbox Code Playgroud)

  • `ax.grid(False)` 是唯一对我有用的东西。谢谢。 (2认同)
  • 这是最好的答案,因为你可以使用它与seaborn,pandas和matplotlib一样.只需在你需要的任何轴上调用`ax.grid(False)`. (2认同)

小智 28

sns.set_style("whitegrid", {'axes.grid' : False})
Run Code Online (Sandbox Code Playgroud)

请注意,样式可以是您选择的有效样式.

有关这方面的好文章,请参阅此站点.


Dat*_*ede 9

问题是使用默认的pandas格式(或您选择的任何格式).不知道幕后的工作原理如何,但这些参数胜过你在绘图函数中传递的格式.您可以在mpl_style字典中看到它们的列表

为了解决它,你可以这样做:

import pandas as pd
pd.options.display.mpl_style = 'default'
new_style = {'grid': False}
matplotlib.rc('axes', **new_style)
data = pd.DataFrame(np.cumsum(np.random.normal(size=(100,2)),axis=0),columns=['A','B'])
data.plot(secondary_y=['B'])
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述


mwa*_*kom 5

这感觉就像Pandas中的错误行为一样,并非所有关键字参数都传递给两个Axes.但是如果你想在seaborn默认关闭网格,你只需要打电话sns.set_style("dark").如果您只想更改一个数字的默认值,也可以sns.axes_stylewith语句中使用.


小智 5

您只需设置:

sns.set_style("刻度线")

它恢复正常。