与pandas.tools.rplots的格子图:轴标签

时间:2014-10-24 22:57:39

标签: 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)) * 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返回的绘图对象内部进行探索。

当然有一种标记轴的方法吗?

1 个答案:

答案 0 :(得分:0)

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

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

这确实是一个通用解决方案,如果Trellis图的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)

无论图中使用的轴数是多少,这都应该有效。