Сиборн - эстетические возможности

Я рисую данные панд, используя морской факторный график. Код выглядит следующим образом:

import seaborn
import numpy as np
import pandas as pd

seaborn.set_style("white")

fg = seaborn.factorplot(x='Group', y='val', hue='Mean', 
                        col='Sex', data=data, kind='bar', ci=68, row='Split', x_order=['Group 1', 'Group 2'],
                        row_order=['Poor','Good'], col_order=['Male', 'Female'], sharex=False, sharey=False, 
                        palette='deep', legend_out=False
                       )

(fg.set_axis_labels("", "val")
  .set_titles("{row_name} - {col_name}")
  .set(ylim=(0, 300))
  .despine(left=True)
) 

Вот пример кадра данных:

groups = ('Group 1', 'Group 2')
sexes = ('Male', 'Female')
means = ('Low', 'High')
split = ('Poor', 'Good')
index = pd.MultiIndex.from_product(
    [groups, sexes, means, split], 
   names=['Group', 'Sex', 'Mean', 'Split']
)

values = np.random.randint(low=20, high=100, size=len(index))
data = pd.DataFrame(data={'val': values}, index=index).reset_index()

Я посмотрел, какие эстетические возможности есть у Seaborn, и есть несколько, на которые я не могу найти ссылку:

  • Это создает сетку 2x2 из 4 графиков. Как настроить расстояние между каждым из графиков? Сейчас все слишком близко друг к другу

  • Как индивидуально установить размер шрифта для отдельных меток? Я бы хотел, чтобы некоторые оси/категориальные метки были больше других

  • Как полностью убрать название легенды?

  • Можно ли с сеткой участков 2x2 поместить 2 участка в одну строку на один и тот же участок? т.е. подключить ось x, удалить ось y на правом графике

  • Можно ли сохранить графики в векторном формате файла?


person Simon    schedule 08.08.2015    source источник
comment
Можете ли вы предоставить фрагмент вашего DataFrame для запуска некоторых тестов?   -  person Diziet Asahi    schedule 08.08.2015


Ответы (1)


fg = seaborn.factorplot(x='Group', y='val', hue='Mean', 
                        col='Sex', data=data, kind='bar',
                        ci=68, row='Split',
                        order=['Group 1', 'Group 2'],
                        row_order=['Poor','Good'],
                        col_order=['Male', 'Female'],
                        sharex=False, sharey="row", 
                        palette='deep', legend_out=False
                       )

(fg.set_axis_labels("", "val")
  .set_titles("{row_name} - {col_name}")
  .set(ylim=(0, 300))
  .despine(left=True)
)

# Increase space between rows and remove space between cols
fg.fig.subplots_adjust(hspace=.4, wspace=0)

# Change some label sizes
fg.axes[0, 0].title.set(size=16)
fg.axes[1, 0].yaxis.label.set(size=16)
plt.setp(fg.axes[0, 1].get_xticklabels(), size=16)

# Remove the legend title
fg.axes[0, 0].legend()

# Save to a vector format
fg.savefig("figure.svg")

введите здесь описание изображения

Обратите внимание, что в дополнение к дополнительным строкам я добавил sharey="row" в вызов factorplot, который удаляет галочки по оси Y.

person mwaskom    schedule 09.08.2015
comment
sharey='row'? блестяще! - person Paul H; 11.08.2015