2014-10-10 73 views
9

有沒有辦法改變matplotlib中violin曲線的顏色?改變matplotlib的小提琴曲線的顏色

默認的顏色是這種「褐色」顏色,這並不算太壞,但我想用不同的顏色例如前3把小提琴來突出顯示它們。我在documentation中找不到任何參數。任何想法或黑客的顏色不同的小提琴?

enter image description here

+0

你可以打開一個功能要求添加該功能?小提琴在1.4中畫出了一個新的特徵,並且(顯然)仍然需要一些改進。 – tacaswell 2014-10-10 13:58:56

+0

你是如何設法在情節中使用圓圈標記的? – xyz 2016-07-11 15:06:52

回答

17

matplotlib.pyplot.violinplot()說,它返回:

對應的字典的violinplot的每個部件,以創建相應的收集實例的列表。本字典有以下鍵:

  • bodies:包含每個小提琴的填充區域的matplotlib.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),那麼額外的參數將是不明確的。

+1

謝謝,補丁,拉鍊顏色(vplot ['bodies'],顏色): patch.set_color(color)'做了這個工作! – Sebastian 2014-10-10 03:51:38

+0

這不適合某人嗎?讓我知道... – 2017-06-01 16:22:05

+0

或簡單地使用'plt.setp',例如'plt.setp(violin_parts ['bodies'],facecolor ='red',edgecolor ='black')' – 2017-06-13 13:29:53

0
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