我有一些成对出现的条件的数据,结构如下:
mydata = {
"WT_before": [11,12,13],
"WT_after": [16,17,18],
"MRE11_before": [21,22,23,24,25],
"MRE11_after": [26,27,28,29,30],
"NBS1_before": [31,32,33,34],
"NBS1_after": [36,37,38,39]
}
(my真实的数据具有更多条件,每个条件具有更多值,这只是一个示例)
我研究了如何成对地给箱线图着色,以帮助阅读图形,但在matplotlib中这样做似乎相当复杂。
目前我是这样做的:
bxplt_labels, bxplt_data = mydata.keys(), mydata.values()
bxplt_colors = ["pink", "pink", "lightgreen", "lightgreen", "lightblue", "lightblue"]
fig2, ax = plt.subplots(figsize=(20, 10), dpi=500)
bplot = plt.boxplot(bxplt_data, vert=False, showfliers=False, notch=False, patch_artist=True,)
for patch, color in zip(bplot['boxes'], bxplt_colors):
patch.set_facecolor(color)
plt.yticks(range(1, len(bxplt_labels) + 1), bxplt_labels)
fig2.show()
其产生图:
我想:
1.对条件名称进行排序,以便我可以根据自己的选择对它们进行排序,并且
1.以更优雅的方式选择所用颜色,特别是因为我需要在以后的更多图中重复使用这些数据(如每个条件的前/后散点图)
如果需要的话,我可以重新排列数据结构,但是每个条件的值的数量不一样,所以字典对我来说是最好的选择。或者,我可以使用seborn,我看到它有很多可能性,但我不熟悉它,所以我需要更多的时间来理解它。
你能帮我弄明白吗?
1条答案
按热度按时间y4ekin9u1#
Seaborn最容易使用"长格式"的 Dataframe 。在这种情况下,会有一些行对每个具有该条件的值重复该条件。
Seborn的箱线图接受一个关键字
order=
,在这里你可以改变x值的顺序。例如,order=sorted(mydata.keys())
按字母顺序排序。或者list(mydata.keys())[::-1]
使用原来的顺序,但是相反。默认的顺序是值在数据框中的显示方式。对于水平箱线图,可以使用
x='value', y='condition'
。顺序将应用于x或y,具体取决于包含字符串的列。对于着色,可以使用关键字
palette=
。它可以是一个表示matplotlib或seborn的色彩Map表的字符串,也可以是一个颜色列表。Many more options are possible.下面是一个使用水平框的示例:
Dataframe 如下所示:
| | 调节器|价值观|
| - -| - -| - -|
| 第0页|WT_之前|十一|
| 一个|WT_之前|十二|
| 2个|WT_之前|十三|
| 三个|WT_之后|十六|
| 四个|WT_之后|十七岁|
| 五个|WT_之后|十八|
| 六个|MRE11_之前|二十一个|
| 七个|MRE11_之前|二十二个|
| 八个|MRE11_之前|二十三个|
| 九个|MRE11_之前|二十四|
| 10个|MRE11_之前|二十五个|
| 十一|MRE11_之后|二十六人|
| 十二|MRE11_之后|二十七人|
| 十三|MRE11_之后|二十八人|
| 十四|MRE11_之后|二十九人|
| 十五|MRE11_之后|三十|
| 十六|NBS1_之前|三十一个|
| 十七岁|NBS1_之前|三十二|
| 十八|NBS1_之前|三十三人|
| 十九|NBS1_之前|三十四|
| 二十个|NBS1_之后|三十六|
| 二十一个|NBS1_之后|三十七|
| 二十二个|NBS1_之后|三十八|
| 二十三个|NBS1_之后|三十九|