2016-02-01 2 views
5

Я хотел был бы сравнить набор распределений баллов (score), сгруппированных по некоторым категориям (centrality) и покрашенного каким-либо другим (model). Я попытался следующим с Сиборном:Тонкая настройка seaborn.boxplot

plt.figure(figsize=(14,6)) 
seaborn.boxplot(x="centrality", y="score", hue="model", data=data, palette=seaborn.color_palette("husl", len(models) +1)) 
seaborn.despine(offset=10, trim=True) 
plt.savefig("/home/i11/staudt/Eval/properties-replication-test.pdf", bbox_inches="tight") 

Есть некоторые проблемы, я с этим сюжетом:

  • Существует большое количество выпадающих и мне не нравится, как они нарисованы здесь , Могу ли я удалить их? Могу ли я изменить внешний вид, чтобы показать меньше беспорядка? Могу ли я покрасить их по крайней мере так, чтобы их цвет соответствовал цвету коробки?
  • Значение modeloriginal является особенным, потому что все остальные распределения следует сравнивать с распределением original. Это должно быть визуально отражено в сюжете. Могу ли я сделать original первым ящиком каждой группы? Можно ли каким-то образом компенсировать или пометить его по-другому? Можно ли провести горизонтальную линию через медиану каждого распределения original и через группу ящиков?
  • Некоторые значения score очень малы, как сделать правильное масштабирование оси y, чтобы показать их?

enter image description here

EDIT:

Вот пример с лог-масштабируется оси у - тоже еще не идеальна. Почему некоторые коробочки кажутся обрезанными на нижнем конце?

enter image description here

+1

Синие выбросы являются ошибкой matplotlib, и их можно избежать, обновив свой морской океан. Но я, конечно, не просто удалял бы выбросы! – mwaskom

+2

Вы пробовали [log-scaling] (http://stanford.edu/~mwaskom/software/seaborn/examples/horizontal_boxplot.html) переменную y? – mwaskom

+0

@mwaskom Да, но это «сжимает» решетки больших значений в верхней части графика. Есть ли компромисс, т. Е. Логарифмический масштаб только для части оси? – clstaudt

ответ

14

дисплей Outlier

Вы должны быть в состоянии передать любые аргументы seaborn.boxplot, что вы можете перейти к plt.boxplot (см documentation), так что вы можете настроить отображение выбросов путем установки flierprops , Here - некоторые примеры того, что вы можете сделать с вашими выбросами.

Если вы не хотите, чтобы отобразить их, вы могли бы сделать

seaborn.boxplot(x="centrality", y="score", hue="model", data=data, 
       showfliers=False) 

или вы могли бы сделать их светло-серый, как так:

flierprops = dict(markerfacecolor='0.75', markersize=5, 
       linestyle='none') 
seaborn.boxplot(x="centrality", y="score", hue="model", data=data, 
       flierprops=flierprops) 

Порядок групп

Вы можете установить порядок групп вручную с помощью hue_order, например

seaborn.boxplot(x="centrality", y="score", hue="model", data=data, 
       hue_order=["original", "Havel..","etc"]) 

Масштабирование оси у

Вы можете просто получить минимальные и максимальные значения всех у-значений и установить y_lim соответственно?Что-то вроде этого:

y_values = data["scores"].values 
seaborn.boxplot(x="centrality", y="score", hue="model", data=data, 
       y_lim=(np.min(y_values),np.max(y_values))) 

EDIT: Последний пункт не имеет смысла, так как автоматический y_lim диапазон будет уже включают в себя все значения, но я оставляю это как пример того, как настроить эти параметры , Как упоминалось в комментариях, масштабирование журнала, вероятно, имеет больше смысла.

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