【问题标题】:Show only the n'th ticklabel in a pandas boxplot仅显示熊猫箱线图中的第 n 个刻度标签
【发布时间】:2013-05-21 05:36:37
【问题描述】:

我是 pandas 和 matplotlib 的新手,但不是 Python 的新手。我有两个问题;一个主要的和一个次要的。

主要:
我有一个熊猫箱线图,x 轴为 FICO 分数,y 轴为利率。 我的 x 轴都搞砸了,因为 FICO 分数相互覆盖。 出于以下几个原因,我只想在 x 轴上显示每 4 个或第 5 个刻度标签:

  • 总的来说,它的图表垃圾较少
  • 在这种情况下,它将允许实际读取标签。

我的代码sn-p如下:

plt.figure()  
loansmin = pd.read_csv('../datasets/loanf.csv')  
p = loansmin.boxplot('Interest.Rate','FICO.Score')

我将返回值保存在 p 中,因为我认为我可能需要像现在这样进一步操作绘图。

中学:
如何从 pandas boxplot 中访问 plot、subplot、axes 对象。
p 上面是一个 matplotlib.axes.AxesSubplot 对象。
help(matplotlib.axes.AxesSubplot) 给出一条消息:

'AttributeError: 'module' object has no attribute 'AxesSubplot'

dir(matplotlib.axes) 列出了 AxesSubplotSubplotbase 在该命名空间中,但没有 AxesSubplot。如何更好地理解这个返回的对象?

【问题讨论】:

  • 你应该查看 matplotlib 中的MultipleLocator。这是一个关于此的example。附带说明;根据我的经验,使用 matplotlib 绘图比在 pandas 中绘图更灵活。
  • 您好 nordev,感谢您的指点。但是,要使用 MultipleLocator,我需要访问底层对象。虽然 matplotlib 肯定更灵活,但学习曲线要​​高得多,而且根据我的探索 - 创建箱线图并不像在 pandas 中那样简单和透明。

标签: python matplotlib pandas


【解决方案1】:

当我进一步探索时,我发现可以通过dir() 探索返回的对象p。 这样做我发现了一长串有用的方法,其中有set_xticklabels。 执行help(p.set_xticklabels) 提供了一些神秘但仍然有用的帮助——本质上是建议为刻度标签传入一个字符串列表。

然后我尝试执行以下操作 - 将 set_xticklabels 添加到上述代码的最后一行的末尾,从而有效地链接调用。

plt.figure()  
loansmin = pd.read_csv('../datasets/loanf.csv')  
p=loansmin.boxplot('Interest.Rate','FICO.Score').set_xticklabels(['650','','','','','700'])

这给出了预期的结果。我怀疑有一种更好的方法,就像 matplotlib 那样,它允许您显示每个第 n 个标签。但是为了立即使用,这很有效,并且还允许在需要时设置标签,无论出于何种原因,它们都不是周期性的。

像往常一样,明确地写出问题有助于我找到答案。如果有人可以帮助我了解底层的 matplotlib 对象,这仍然是一个悬而未决的问题。

【讨论】:

  • @Nitlin 查看我的回答,了解您发现的内容。
【解决方案2】:

AxesSubplot(我认为)只是在 matplotlib 中获取Axes 的另一种方式。 set_xticklabels() 是 matplotlib 面向对象接口的一部分(在轴上)。因此,如果您使用的是 pylab 之类的东西,您可能会使用 xticks(ticks, labels),但在这里您必须将其分成不同的调用 ax.set_xticks(ticks)ax.set_xticklabels(labels)。 (其中ax 是一个Axes 对象)。

假设您只想将刻度设置为 650 和 700。您可以执行以下操作:

ticks = labels = [650, 700]
plt.figure()
loansmin = pd.read_csv('../datasets/loanf.csv')
p=loansmin.boxplot('Interest.Rate','FICO.Score')
p.set_xticks(ticks)
p.set_xticklabels(labels)

同样,您可以使用set_xlimset_ylimplt 中执行xlim()ylim() 的等效操作。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-07-10
    • 2014-11-05
    • 1970-01-01
    • 2018-11-13
    • 2017-09-23
    • 2018-02-22
    • 2021-02-11
    相关资源
    最近更新 更多