[心得] 将多个 boxplot 画在同一张

楼主: mikemike1021 (mike)   2022-09-09 05:46:50
论坛无广告完整版: https://forum.community.tw/t/topic/323
差在含有程式码及 latex 的部分,整个贴过来不好阅读
之前有在板上介绍: https://www.ptt.cc/bbs/Python/M.1659038907.A.9C2.html
论坛可以方便大家分享有关电脑或程式相关的事情。
使用 markdown、程式码自动上色、支援 latex 还有标签。
可以直接将程式码贴上,问问题或者解答时就不需要再利用额外网站,达到方便阅读
的效果,另外更将问题跟程式码摆在一块,让别人更好搜寻。
问答也可以使用类似于 stackoverflow 的形式。
正文开始
使用 matplotlib 的 boxplot ,将不同种但有相同分析指标的画在一起,方便对比同一
指标下不同种的差别。直接使用 boxplot 是没办法将不同资料组合在一起,但可以借由
指定位置跟宽度,来达成所需,最后可以画出类似于下图或封面图的效果。除此之外,也
会顺带介绍一些 boxplot 相关参数。
https://imgur.com/8lTHLkT.png
boxplot 参数介绍
https://imgur.com/JXDIguf.png
上图是将我们后面用到的相关参数表现出来:
- 左侧是调整 boxplot 的各个部分 (flier, cap, whisker, box, media) 的影响范围,
并由 *props 所设置(如 flierprops, capprops 等)
- 下方 xtick 默认会是从 1 至 num of cols,每一个 column 产生一个 box
- width 默认是 0.5 且是整个 box 的宽度
- position 是中心点且默认为 xtick 上
将多个 boxplot 画在一起
虽然 matplotlib 并不直接让我们能够结合多个 boxplot,但借由设定 width,
position 可以将各个 box 排好,再借由颜色来区分。
https://imgur.com/5VwT9b0.png
空间计算详见论坛版,简而言之,分配给每一组有 total width / n 的空间,但只画
total width / (n+1) 来区隔各组。
当然这里可以依据自己所需来改变。
实作的程式码就请见论坛
展示
这里偷懒,直接把颜色当图例的名字使用
- 三个指标(num_label)、四种类别(num_kind)
https://imgur.com/6Q8ztaE.png
- 四种指标、七种类别
https://imgur.com/8lTHLkT.png
参考资料:matplotlib boxplot 跟几篇 stackoverflow (网址请见论坛)
最后再次邀请大家来论坛 https://forum.community.tw 试试,希望能够更方便大家讨论
作者: wisad   2022-09-15 08:28:00

Links booklink

Contact Us: admin [ a t ] ucptt.com