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

时间:2014-11-11 15:24:57

标签: python matplotlib pandas plot 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)

gridlines that I want to get rid of

5 个答案:

答案 0 :(得分:30)

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

答案 1 :(得分:24)

sns.set_style("whitegrid", {'axes.grid' : False})

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

有关此问题的精彩文章,请参阅this site

答案 2 :(得分:9)

问题在于使用默认的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'])

enter image description here

答案 3 :(得分:5)

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

答案 4 :(得分:2)

您可以设置:

<块引用>

sns.set_style("ticks")

恢复正常。