控制seaborn中的网格线间距

时间:2015-11-05 09:40:36

标签: matplotlib graph seaborn

我想在seaborn图表上更改水平网格线的间距,我尝试设置样式没有运气:

seaborn.set_style("whitegrid", {
    "ytick.major.size": 0.1,
    "ytick.minor.size": 0.05,
    'grid.linestyle': '--'
 })

bar(range(len(data)),data,alpha=0.5)
plot(avg_line)

网格线自动设置我试图覆盖刻度尺寸

enter image description here

有什么建议吗?谢谢!

2 个答案:

答案 0 :(得分:6)

您可以稍后明确设置刻度线位置,它将在这些位置绘制网格。

最好的方法是使用MultpleLocator模块中的matplotlib.ticker

例如:

import seaborn as sns
import numpy as np
import matplotlib.pyplot as plt
import matplotlib.ticker as ticker

sns.set_style("whitegrid", {'grid.linestyle': '--'})

fig,ax = plt.subplots()
ax.bar(np.arange(0,50,1),np.random.rand(50)*0.016-0.004,alpha=0.5)

ax.yaxis.set_major_locator(ticker.MultipleLocator(0.005))

plt.show()

enter image description here

答案 1 :(得分:0)

OP询问是否要修改Seaborn中的刻度距离。

如果您在Seaborn中工作,并且使用了返回Axes对象的绘图功能,则可以像使用matplotlib中的任何其他Axes对象一样使用该功能。例如:

import matplotlib.pyplot as plt
import seaborn as sns
import statsmodels.api as sm
from matplotlib.ticker import MultipleLocator

df = sm.datasets.get_rdataset("Guerry", "HistData").data

ax = sns.scatterplot('Literacy', 'Lottery', data=df)

ax.yaxis.set_major_locator(MultipleLocator(10))
ax.xaxis.set_major_locator(MultipleLocator(10))

plt.show()

如果您正在使用涉及FacetGrid对象的Seaborn流程之一,则将获得关于如何在无需手动设置的情况下修改刻度线的宝贵帮助。您已经从FacetGrid.axes内的numpy数组中挖掘了Axes对象。

import matplotlib.pyplot as plt
import seaborn as sns
from matplotlib.ticker import MultipleLocator

tips = sns.load_dataset("tips")
g = sns.lmplot(x="total_bill", y="tip", hue="smoker", data=tips, )

g.axes[0][0].yaxis.set_major_locator(MultipleLocator(3))

请注意需要双下标。 g是FacetGrid对象,其中包含dtype = object的二维numpy数组,其条目是matplotlib AxesSubplot对象。

如果要使用具有多个轴的FacetGrid,则必须提取和修改每个轴。