Python 带有pandas.tools.rplots的网格打印:轴标签

Python 带有pandas.tools.rplots的网格打印:轴标签,python,pandas,trellis,Python,Pandas,Trellis,我很难让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)) * 100

我很难让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()
中的一些示例具有轴标签,而有些则没有;在我上面的例子中,我不这么认为。我找不到在我能找到的文档中添加它们的方法,也找不到在rplot.rplot返回的plot对象中四处搜索的方法


肯定有办法标记轴吗?

这可能是一个错误或正在进行的工作

但是,如果在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标签添加到底部轴,将Y标签添加到中间轴

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

编辑:

一个通用的解决方案是在图中添加一个文本,可以这样做: 使用以下代码代替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)

无论绘图中使用了多少轴,这都应该有效。

如果您正在使用熊猫原生网格绘图,我建议您看看mwaskom的超级软件包。它可以做网格图和更多的东西。请注意,熊猫的这个rplots子模块并没有被积极开发,它很可能会被弃用。事实上,你可以看看或@b10,我也在几篇博客文章中看到了seaborn的推荐。我希望只使用我已经安装的东西,但我会检查它。@joris,谢谢-我浏览了讨论,知道它很有用。