在python中水平移动小提琴图

Posted

技术标签:

【中文标题】在python中水平移动小提琴图【英文标题】:shifting violin plot horizontally in python 【发布时间】:2021-08-27 06:55:04 【问题描述】:

我有 8 个不同的 arrya,我想使用小提琴图来比较分布,这就是我绘制的方式:

plt.violinplot(alpha_g159)
plt.violinplot(alpha_g108)
plt.violinplot(alpha_g141)
plt.violinplot(alpha_g110)
plt.violinplot(alpha_g115)
plt.violinplot(alpha_g132)
plt.violinplot(alpha_g105)
plt.violinplot(alpha_g126)

我有这个情节:

实际上我想要做的是水平移动每个图(沿 x 轴),这样它们就不会重叠,然后在 x 轴上添加每个图的标签。

谁能指导我如何做到这一点?我尝试添加例如alpha_108+x0x0=2,但它只是垂直移动它。

【问题讨论】:

matplotlib.org/stable/api/_as_gen/… 。 positions 参数可能是您正在寻找的。​​span> plt.violinplot(alpha_g159, positions=[1]) 等等?还是plt.violinplot([alpha_g159, alpha_g108, alpha_g11...], positions=[1,2,3,...]) 是的,这正是我正在寻找的。你知道我如何标记职位吗?我不希望它们作为数字,而是作为每个情节的标签 【参考方案1】:

您可以通过将数据放入列表来实现此目的。 Matplotlib 并排绘制各个图。

import matplotlib.pyplot as plt
import numpy as np

# put your data in a list like this:
# data = [alpha_g159, alpha_g108, alpha_g141, alpha_g110, alpha_g115, alpha_g132, alpha_g105, alpha_g126]
# as I do not have your data I created some test data
data = [sorted(np.random.normal(0, std, 100)) for std in range(1, 9)]
plt.violinplot(data)

labels = ["alpha_g159", "alpha_g108", "alpha_g141", "alpha_g110", "alpha_g115", "alpha_g132", "alpha_g105", "alpha_g126"]
# add the labels (rotated by 45 degrees so that they do not overlap)
plt.xticks(range(1, 9), labels, rotation=45)

# Tweak spacing to prevent clipping of tick-labels
plt.subplots_adjust(bottom=0.3)

plt.show()

resulting plot

【讨论】:

以上是关于在python中水平移动小提琴图的主要内容,如果未能解决你的问题,请参考以下文章

如何在swift中水平来回移动角色

matplotlib中水平条形图的注释[重复]

Bootstrap 3中水平对齐缩略图到中心

在 React 中水平方向对齐图像和文本

IOS中水平滚动视图问题内的滑块

android中水平recyclerview的问题