控制seaborn中的网格线间距

Dav*_*son 7 graph matplotlib 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)
Run Code Online (Sandbox Code Playgroud)

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

在此输入图像描述

有什么建议?谢谢!

tmd*_*son 8

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

要做到这一点,最巧妙的方法是使用一个MultpleLocatormatplotlib.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()
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述


Dav*_*d R 6

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()
Run Code Online (Sandbox Code Playgroud)

如果您正在使用涉及 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))
Run Code Online (Sandbox Code Playgroud)

请注意所需的双下标。g 是一个 FacetGrid 对象,它保存了一个 dtype=object 的二维 numpy 数组,其条目是 matplotlib AxesSubplot 对象。

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