Участки решетки с 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)
Это должно работать независимо от количества осей, используемых в графике.