如何在matplotlib中通过彩虹设置箱线图颜色

如何在matplotlib中通过彩虹设置箱线图颜色,matplotlib,plot,colors,boxplot,Matplotlib,Plot,Colors,Boxplot,我想在比较中创建数据的箱线图,我的图如下 我怎样才能添加像这样的颜色 您可以为下面的框着色。除此之外,您还需要将心中的数据映射到“彩虹”彩色地图上的颜色。下面是一个随机测试数据的示例。在本例中,我使用平均值映射颜色 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)

我想在比较中创建数据的箱线图,我的图如下

我怎样才能添加像这样的颜色


您可以为下面的框着色。除此之外,您还需要将心中的数据映射到“彩虹”彩色地图上的颜色。下面是一个随机测试数据的示例。在本例中,我使用平均值映射颜色

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()

您可以为下面的框着色。除此之外,您还需要将心中的数据映射到“彩虹”彩色地图上的颜色。下面是一个随机测试数据的示例。在本例中,我使用平均值映射颜色

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()

您可以将
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()


您可以将
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()


哦,你赢了我一拳!非常好的方法,我不会想到使用
np.mean(x)
作为参数,聪明!(+1)@ViníciusAguiar谢谢你。OP没有指定如何映射颜色。所以我想说你的回答也很好。哦,你赢了我一拳!非常好的方法,我不会想到使用
np.mean(x)
作为参数,聪明!(+1)@ViníciusAguiar谢谢你。OP没有指定如何映射颜色。所以我想说你的答案也很好。我这个代码只有紫色@ViníciusAguiarThat很奇怪,它应该可以工作,你从打印
颜色中得到什么?我这个代码只有紫色@ViníciusAguiarThat很奇怪,它应该可以工作,你从打印
颜色中得到什么?