27

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

默认颜色是这种“棕色”颜色,这还不错,但我想给例如前 3 把小提琴上色以突出它们。我在文档中找不到任何参数。有什么想法或技巧可以给小提琴上色吗?

在此处输入图像描述

4

2 回答 2

41

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

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

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

PolyCollections 的方法包括:

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

violin_parts = plt.violinplot(...)

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

有点奇怪的是,在创建它时不能像常见的绘图类型一样设置它。我猜这可能是因为该操作创建了太多位(前面提到的PolyCollection以及其他 5 个LineCollections),所以附加参数会模棱两可。

于 2014-10-10T03:42:19.990 回答
10
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)

在此处输入图像描述

于 2017-05-27T02:47:21.247 回答