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

Posted

技术标签:

【中文标题】使用带有secondary_y的Seaborn + Pandas绘图时如何摆脱网格线【英文标题】:How to get rid of grid lines when plotting with Seaborn + Pandas with secondary_y 【发布时间】:2015-01-08 04:52:38 【问题描述】:

我正在使用导入 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)

【问题讨论】:

你使用什么颜色偏好?图片不是matplotlib默认的。我敢打赌这就是造成问题的原因 @DataSwede 对我来说它看起来像是默认的熊猫方案......而且我也得到了这些行 我的答案是否适用于 seaborn?没用过,不知道有没有用 是的,它适用于 seaborn。 【参考方案1】:

您可以在绘图后取出 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.grid(False)

【讨论】:

ax.grid(False) 是唯一对我有用的东西。谢谢。 这是最好的答案,因为您可以将它与 seaborn、pandas 和 matplotlib 等一起使用。只需在您需要的任何轴上调用ax.grid(False)【参考方案2】:
sns.set_style("whitegrid", 'axes.grid' : False)

请注意,样式可以是您选择的任何有效样式。

有关这方面的精彩文章,请参阅this site。

【讨论】:

【参考方案3】:

问题在于使用默认的 pandas 格式(或您选择的任何格式)。不确定幕后是如何工作的,但这些参数胜过您在绘图函数中传递的格式。你可以看到他们的名单here in the mpl_style dictionary

为了绕过它,你可以这样做:

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

【讨论】:

我不知道我是否应该将此标记为已接受的答案,因为它确实有效,但如果有一种方法可以在 seaborn 中“本地”执行此操作,那就太好了。【参考方案4】:

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

【讨论】:

【参考方案5】:

你可以设置:

sns.set_style("ticks")

恢复正常。

【讨论】:

以上是关于使用带有secondary_y的Seaborn + Pandas绘图时如何摆脱网格线的主要内容,如果未能解决你的问题,请参考以下文章

ValueError:使用带有 seaborn 线图的索引时无法解释输入“索引”

Seaborn:带有频率的计数图()

带有日期时间对象的 Seaborn 回归图

带有日期时间轴的 Seaborn 热图

来自带有 NaN 的 pandas 数据框的 seaborn 热图

如何在 matplotlib 或 seaborn 中创建带有系列的堆叠条形图? [复制]