如何设置matplotlib x轴的起点?

时间:2017-09-25 21:58:09

标签: python pandas matplotlib seaborn

我遇到了使用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()

我明白了:

Image1

请注意x轴值以及它们如何从20开始。有没有办法抵消自动收报机?我尝试了ax.set_xlim(xmin=20, xmax=100),但只是从我的图表的底部20开始,并将它向右延伸到空白区域20。如果我删除了所有轴格式,它已正确标记,但由于列出了每个标签,因此太忙了。谢谢你的帮助。

3 个答案:

答案 0 :(得分:0)

由于我们知道seaborn条形图中的刻度总是从0开始,我们可以将revol_util值的第一个值添加到matplotlib.ticker.FuncFormatter中的当前刻度以及现有{ {1}}。

MultipleLocator

enter image description here

答案 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