改变matplotlib小提琴图的颜色

18 python matplotlib violin-plot

有没有办法改变violinmatplotlib 中的图的颜色?

默认颜色是这种"褐色"颜色,这不是太糟糕,但我想要着色,例如,前3个小提琴不同以突出它们.我在文档中找不到任何参数.任何想法或黑客颜色不同的小提琴?

在此输入图像描述

Nic*_*k T 28

matplotlib.pyplot.violinplot() 说它返回:

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

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

方法PolyCollection小号包括:

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

violin_parts = plt.violinplot(...)

for pc in violin_parts['bodies']:
    pc.set_facecolor('red')
    pc.set_edgecolor('black')
Run Code Online (Sandbox Code Playgroud)

虽然在创建它时不能像常见的绘图类型那样设置它,但有点奇怪.我猜这可能是因为操作创建了很多位(前面提到的PolyCollection还有其他5位LineCollections),额外的参数将是模棱两可的.

  • 谢谢,`补丁,拉链颜色(vplot ['body'],颜色):patch.set_color(颜色)`完成了工作! (2认同)
  • 只是想说 `violin_parts.keys()` 将列出您可以调整的所有不同部分。例如:`dict_keys(['bodies', 'cmaxes', 'cmins', 'cbars', 'cmedians'])`。然后,`dir(violin_parts['cbars'])`将列出您可以设置的属性。例如:`violin_parts['cbars'].set_linewidth(1)` (2认同)

Joe*_*ant 7

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)
Run Code Online (Sandbox Code Playgroud)

在此处输入图片说明