我想在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)
网格线自动设置我试图覆盖刻度尺寸
有什么建议吗?谢谢!
答案 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()
答案 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,则必须提取和修改每个轴。