Участки решетки с pandas.tools.rplots: метки осей

Мне трудно получить 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 имеют метки оси, а некоторые нет; в моем примере выше моего нет. Я не могу найти способ добавить их в документацию, которую могу найти, или покопаться в объекте plot, который возвращает rplot.RPlot.

Конечно, есть способ обозначить оси?

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 к нижнему топору и метку Y к среднему топору.

Это действительно не универсальное решение, и его необходимо скорректировать, если 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)

Это должно работать независимо от количества осей, используемых в графике.

Другие вопросы по тегам