【问题标题】:trellis plots with pandas.tools.rplots: axes labels带有 pandas.tools.rplots 的格子图:轴标签
【发布时间】:2014-12-20 20:31:19
【问题描述】:

我很难让 pandas.tools.rplots 标记我的坐标轴。这是一个最小的例子:

 import pandas as pd
 import pandas.tools.rplot as rplot
 import numpy as np
 import matplotlib.pyplot as plt

 sitecodes = ['A'] * 10 + ['B'] * 10 + ['C'] * 10
 altitude = np.random.rand(len(sitecodes)) * 1000
 obs = np.random.rand(len(sitecodes))

 df = pd.DataFrame({'sitecodes':sitecodes,
                    'altitude':altitude,
                    'obs':obs})

 plt.figure()
 plot = rplot.RPlot(df, x='altitude', y='obs')
 plot.add(rplot.TrellisGrid(['sitecodes', '.']))
 plot.add(rplot.GeomScatter())
 discard = plot.render()
 plt.show()

http://pandas.pydata.org/pandas-docs/stable/visualization.html#trellis-plotting-interface 中的一些例子有轴标签,有些没有;在我上面的例子中,我没有。我找不到将它们添加到我能找到的文档中的方法,也找不到在 rplot.RPlot 返回的绘图对象内四处寻找的方法。

肯定有办法给坐标轴加标签吗?

【问题讨论】:

  • 如果您正在为 pandas 原生格状图而苦苦挣扎,我建议您看看 mwaskom 的出色 seaborn 包。它可以做格子图等等。
  • 请注意,pandas 的这个 rplots 子模块没有积极开发,很可能会被弃用 (github.com/pydata/pandas/issues/3445)。所以确实,你可以看看seabornggplot for python
  • @b10,我在几篇博文中也看到了 seaborn 的推荐。我希望只使用我已经安装的东西,但我会检查一下。
  • @joris,谢谢 - 我浏览了那个讨论,知道它很有用。

标签: python pandas trellis


【解决方案1】:

这可能是一个错误或“正在进行中”...

但是,如果在 plt.show() 之前的代码末尾添加以下内容:

for i, a in enumerate(plt.gcf().axes):
    if a.get_xticks().any():
        plt.setp(a, xlabel='altitude')
    if i == 1:
        plt.setp(a, ylabel='obs')
plt.show()

它将X标签添加到底部Axe,Y标签添加到中间Axe。

这确实不是一个通用的解决方案,如果格子图的x、y维度不同,则需要调整。

编辑:

通用解决方案是将Text 添加到Figure,可以这样完成: 而不是你的discard = plot.render() 使用这个代码:

fig = plt.gcf()
fig.text(s='altitude', x=0.5, y=0, ha='center')
fig.text(s='obs', x=0, y=0.5, va='center', rotation='vertical')
discard = plot.render(fig)

无论图中使用的轴数如何,这都应该有效。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-11-16
    • 2011-10-21
    • 1970-01-01
    • 2020-07-03
    • 2012-04-26
    • 1970-01-01
    • 2015-10-06
    • 1970-01-01
    相关资源
    最近更新 更多