改变matplotlib小提琴图的颜色

时间:2014-10-10 03:26:04

标签: python matplotlib violin-plot

有没有办法在matplotlib中更改violin图的颜色?

默认颜色为"褐色"颜色,这不是太糟糕,但我喜欢着色,例如,前三个小提琴不同,以突出它们。我在documentation中找不到任何参数。是否有任何想法或黑客以不同的方式为小提琴着色?

enter image description here

2 个答案:

答案 0 :(得分:26)

matplotlib.pyplot.violinplot()表示会返回:

  

将小提琴图的每个组件映射到创建的相应集合实例的列表的字典。字典有以下键:

     
      
  • bodies:包含每个小提琴填充区域的matplotlib.collections.PolyCollection个实例列表。
  •   
  • [...除其他外......]
  •   

PolyCollections的方法包括:

所以,看起来你可以循环遍历结果的正文列表并修改每个的面部颜色:

violin_parts = plt.violinplot(...)

for pc in violin_parts['bodies']:
    pc.set_facecolor('red')
    pc.set_edgecolor('black')

虽然在创建公共绘图类型时无法设置,但有点奇怪。我猜它可能是因为操作创建了这么多位(前面提到的PolyCollection和另外5个LineCollections),其他参数会不明确。

答案 1 :(得分:6)

import numpy as np
import matplotlib.pyplot as plt
%matplotlib inline

rrred = '#ff2222'
bluuu = '#2222ff'
x = np.arange(2, 25)
y = np.array([xi * np.random.uniform(0, 1, 10**3) for xi in x]).T

# Create violin plot objects:
fig, ax = plt.subplots(1, 1, figsize = (8,8))
violin_parts = ax.violinplot(y, x, widths = 0.9, showmeans = True, showextrema = True, showmedians = True)

# Make all the violin statistics marks red:
for partname in ('cbars','cmins','cmaxes','cmeans','cmedians'):
    vp = violin_parts[partname]
    vp.set_edgecolor(rrred)
    vp.set_linewidth(1)

# Make the violin body blue with a red border:
for vp in violin_parts['bodies']:
    vp.set_facecolor(bluuu)
    vp.set_edgecolor(rrred)
    vp.set_linewidth(1)
    vp.set_alpha(0.5)

enter image description here