2014-11-17 2 views
5

Я использую Pandas, чтобы нарисовать матрицу рассеянного экрана: from pandas.tools.plotting import scatter_matrix. Проблема в том, что имена столбцов в DataFrame слишком велики, и мне нужно, чтобы они были вертикальными по оси x и горизонтали по оси Y, чтобы они могли поместиться. Я вообще не могу понять, как это сделать в Пандах. Я знаю, как это сделать в matplotlib, но не в Пандах.Создание меток диаграммы рассеивания по вертикали и горизонтали в Pandas

Мой код:

pylab.clf() 
df = pd.DataFrame(X, columns=the_labels) 
axs = scatter_matrix(df, alpha=0.2, diagonal='kde') 

Edit: мне нужно использовать pylab.clf(), потому что я черчение много цифр, поэтому вызов pylab.figure() каждый раз слишком трудоемкую память.

+0

Хочет имена столбцов поворачивать или клещи. –

ответ

4

scatter_matrix возвращает двумерный массив matplotlib подзаголовков. Это означает, что вы должны иметь возможность выполнять итерацию по двум массивам и использовать функции matplotlib для поворота осей. Исходя из источника, используемого для реализации scatter_matrix и частной вспомогательной функции _label_axis, это выглядит, как будто вы должны быть в состоянии выполнять свои повороты на всех участках с:

from matplotlib.artist import setp 

x_rotation = 90 
y_rotation = 90 

for row in axs: 
    for subplot in row: 
     setp(subplot.get_xticklabels(), rotation=x_rotation) 
     setp(subplot.get_yticklabels(), rotation=y_rotation) 

Я не хороший способ проверить это может потребовать немного поиграть.

6

Основной помощь от этого ответа: https://stackoverflow.com/a/18994338/2632856

a = [[1,2], [2,3], [3,4], [4, 5], [1, 6], [2,7], [1,8]] 
df = pd.DataFrame(a,columns=['askdabndksbdkl','aooweoiowiaaiwi']) 
axs = pd.scatter_matrix(df, alpha=0.2, diagonal='kde') 
n = len(df.columns) 
for x in range(n): 
    for y in range(n): 
     # to get the axis of subplots 
     ax = axs[x, y] 
     # to make x axis name vertical 
     ax.xaxis.label.set_rotation(90) 
     # to make y axis name horizontal 
     ax.yaxis.label.set_rotation(0) 
     # to make sure y axis names are outside the plot area 
     ax.yaxis.labelpad = 50 

enter image description here

+0

Жаль, что я не мог дать вам 10 голосов для этого ответа – Goodword

Смежные вопросы