控制 seaborn 中的网格线间距

Control gridline spacing in 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)

网格线是自动设置的,尽管我试图覆盖刻度大小

有什么建议吗?谢谢!

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

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

例如:

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()

OP 询问有关在 Seaborn 中修改刻度距离的问题。

如果您在 Seaborn 中工作并且使用 returns 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,则必须提取和修改每个轴。