2017-07-20 199 views

回答

3

您可以在this example之後爲框着色。除此之外,您需要將您的數據映射到this module的「彩虹」色彩圖上。這是一個隨機測試數據的例子。在這個例子中,我用顏色來表示顏色。

import matplotlib.pyplot as plt 
import matplotlib.cm as cm 
import numpy as np 

# Random test data 
test_data = [np.random.normal(mean, 1, 100) for mean in range(50)] 

fig, axes = plt.subplots(figsize=(12, 16)) 

# Horizontal box plot 
bplot = axes.boxplot(test_data, 
        vert=False, # vertical box aligmnent 
        patch_artist=True) # fill with color 

# Fill with colors 
cmap = cm.ScalarMappable(cmap='rainbow') 
test_mean = [np.mean(x) for x in test_data] 
for patch, color in zip(bplot['boxes'], cmap.to_rgba(test_mean)): 
    patch.set_facecolor(color) 

plt.show() 

enter image description here

+0

哦,你打我一記重拳!真的很好的方法,我不會考慮用'np.mean(x)'作爲參數,聰明! (+1) –

+0

@ViníciusAguiar謝謝。 OP沒有指定如何映射顏色。所以我會說你的答案也很好。 –

3

可以使用cmap屬性實際上是一個函數,在0和1之間接受的價值觀,並將其命名爲「正常化」您的數據。上箱線圖使用matplotlib例如:

import matplotlib.pyplot as plt 
import numpy as np 

# Random test data 
np.random.seed(123) 
all_data = [np.random.normal(0, 5, 100) for std in range(1, 21)] 

fig, ax = plt.subplots(nrows=1, figsize=(9, 4)) 

# rectangular box plot 
bplot = ax.boxplot(all_data, 0, '', 0, patch_artist=True) 

cm = plt.cm.get_cmap('rainbow') 
colors = [cm(val/len(all_data)) for val in range(len(all_data))] 

for patch, color in zip(bplot['boxes'], colors): 
    patch.set_facecolor(color) 

plt.show() 

+0

這個代碼我只得到紫色@ViníciusAguiar –

+0

這很奇怪,它應該工作,你從打印'顏色'得到什麼? –