【问题标题】:Change the color of the individual max and mean line in a violin plot using matplotlib使用 matplotlib 更改小提琴图中单个最大和平均线的颜色
【发布时间】:2021-11-01 10:09:55
【问题描述】:

所以基本上我想改变我情节中每把小提琴的平均线、最小线和最大线的颜色。

我知道我可以通过使用字典来更改情节中所有小提琴的颜色:

violin_parts = ax_lst[0].violinplot(tmp_list, showmedians=True, quantiles=[[0.99], [0.99], [0.99],[0.99]])
for partname in ('cbars','cmins','cmaxes','cmedians','cquantiles'):
        vp = violin_parts[partname]
        vp.set_edgecolor("#3498db")
        vp.set_linewidth(1.6)
        vp.set_alpha(1) 

问题在于,使用这种方法,我无法编辑每把小提琴的单独线条,而且我似乎找不到解决方法。出于某种原因,只有主体本身可以作为所有小提琴的迭代器访问。

【问题讨论】:

  • matplotlib.org/stable/gallery/statistics/… violin_parts 是一个dict,其值中有matplotlib.collections;好像你会有索引并分配你想要的。该问题未提供完整的minimal reproducible example'cbars','cmins','cmaxes','cmeans','cmedians' 只有一个集合,这意味着您将无法单独分配它们。 bodies 是一个集合列表,因此可以单独分配每个集合。

标签: python matplotlib violin-plot


【解决方案1】:

您可以获取小提琴图的集合,并使用 set_color 将其设置为任何小提琴集合。您得到的颜色是一种颜色的列表,因此您可以将其转换为包含您要处理的任何颜色的列表。

import matplotlib.pyplot as plt
import numpy as np
from matplotlib.collections import LineCollection

# create test data
np.random.seed(20210903)
data = [sorted(np.random.normal(0, std, 100)) for std in range(1, 5)]

fig, ax = plt.subplots(figsize=(8, 4))

parts = ax.violinplot(data, showmeans=True)

cmax_colors = parts['cmaxes'].get_color()
colors = [cmax_colors[0],'red',cmax_colors[0],cmax_colors[0]]
parts['cmaxes'].set_color(colors)

cmin_colors = parts['cmins'].get_color()
colors = [cmin_colors[0],'red',cmin_colors[0],cmin_colors[0]]
parts['cmins'].set_color(colors)

cmean_colors = parts['cmeans'].get_color()
colors = [cmean_colors[0],'red',cmean_colors[0],cmean_colors[0]]
parts['cmeans'].set_color(colors)

cbar_colors = parts['cbars'].get_color()
colors = [cbar_colors[0],'red',cbar_colors[0],cbar_colors[0]]
parts['cbars'].set_color(colors)

plt.show()

【讨论】:

  • matplotlib小提琴图颜色统一,所以是冗余代码。我们假设我们可以为每种颜色设置单独的颜色。
  • 谢谢,但是如何改变垂直线呢?
  • 可以使用相同的技术更改中心线。代码和图表已更新。
猜你喜欢
  • 1970-01-01
  • 2017-05-13
  • 2021-06-18
  • 2018-12-16
  • 1970-01-01
  • 2019-12-07
  • 1970-01-01
  • 2019-12-31
  • 1970-01-01
相关资源
最近更新 更多