我遇到了使用Seaborn / matplotlib的简单问题,因为我的x轴值似乎与条形上的标签没有正确关联。作为参考,我有一个pandas.DataFrame
对象,并删除了前20行,以显示更详细的数据,给我一些类似的东西:
hypothesis1_df:
revol_util deviation
20 20 -37.978539
21 21 -27.313996
22 22 -23.790328
23 23 -19.729957
24 24 -16.115686
.. ... ...
96 96 67.275585
97 97 91.489382
98 98 60.967792
99 99 48.385094
100 100 77.852812
现在的问题是我使用以下代码对此进行图表处理:
import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt
import matplotlib.ticker as ticker
ax = sns.barplot(x='revol_util', y='deviation', data=hypothesis1_df)
ax.set(xlabel="Revolving Credit Utilization (%)",
ylabel="Deviation from Mean (%)",
title="Credit Utilization and Likelihood of Late Payments\n(20 - 100%)")
ax.xaxis.set_major_formatter(ticker.FormatStrFormatter('%d')) # Format axis ticks as int
ax.xaxis.set_major_locator(ticker.MultipleLocator(base=10)) # Set tick label frequency = base
plt.show()
我明白了:
请注意x轴值以及它们如何从20开始。有没有办法抵消自动收报机?我尝试了ax.set_xlim(xmin=20, xmax=100)
,但只是从我的图表的底部20开始,并将它向右延伸到空白区域20。如果我删除了所有轴格式,它已正确标记,但由于列出了每个标签,因此太忙了。谢谢你的帮助。
答案 0 :(得分:0)
由于我们知道seaborn条形图中的刻度总是从0开始,我们可以将revol_util
值的第一个值添加到matplotlib.ticker.FuncFormatter
中的当前刻度以及现有{ {1}}。
MultipleLocator
答案 1 :(得分:-1)
尝试:ax.set_xticklabels(hypothesis1_df.index.tolist())
手动设置x轴标签。
答案 2 :(得分:-1)
问题在于,在海边条形图中,条形图确实位于0,1,...,N-1
;并且它们的标签使用FixedLocator
设置为与数据对应的数字。
因此,一个选项可能: 使用多个定位器并手动设置ticklabels
ax.xaxis.set_major_locator(ticker.MultipleLocator(10))
ax.set_xticklabels(df.index.tolist()[::10]) # take every tenth label from list