Python Matplotlib 填充箱线图

12

3
这是一个展示箱线图的Python示例代码网页,可用于数据可视化。 - Fenikso
你能展示一下你尝试过的吗? - tacaswell
2个回答

41

@Fenikso提供了一个示例来说明如何做到这一点,但实际上它采用了一个次优的方式。

基本上,您需要将patch_artist=True传递给boxplot

以下是一个快速的示例:

import matplotlib.pyplot as plt
import numpy as np

data = [np.random.normal(0, std, 1000) for std in range(1, 6)]
plt.boxplot(data, notch=True, patch_artist=True)

plt.show()

在此输入图片描述

如果您想控制颜色,请执行类似以下的操作:

import matplotlib.pyplot as plt
import numpy as np

data = [np.random.normal(0, std, 1000) for std in range(1, 6)]

box = plt.boxplot(data, notch=True, patch_artist=True)

colors = ['cyan', 'lightblue', 'lightgreen', 'tan', 'pink']
for patch, color in zip(box['boxes'], colors):
    patch.set_facecolor(color)

plt.show()

输入图像描述


在循环中添加 patch.set_alpha(0.5) 以实现透明度。 - n1000
1
@n1000 - 请注意,您可以使用set方法通过组合调用“set_<blah>”来实现。例如:patch.set(facecolor=color, alpha=0.5) - Joe Kington
太好了 - 谢谢!我已经搜索了几个小时,寻找一种干净的方法来完成这个。 - Arne Babenhauserheide
2
能否将盒子的面颜色设置为透明,但不影响边框线的透明度? - Ger
@Ger:为此,您可能需要执行“相同”的绘图两次:一次使用补丁艺术家、透明填充和没有任何线条,然后第二次使用线条艺术家(patch_artist=False,默认值)以获取不透明的线条。 - Lutz Prechelt

2
你可以使用Plotly Python API实现这一点。此图表、脚本和数据的位置在这里

要控制颜色,您需要指定fillcolor。 在这里,默认设置为填充。或者,您可以通过添加'fillcolor':'rgba(255, 255, 255, 0)'来使它透明。 你也可以使用GUI进行样式调整。

import plotly
py = plotly.plotly(username='username', key='api_key')

from numpy.random import lognormal

x=[0]*1000+[1]*1000+[2]*1000
y=lognormal(0,1,1000).tolist()+lognormal(0,2,1000).tolist()+lognormal(0,3,1000).tolist()
s={'type':'box','jitter':0.5}
l={'title': 'Fun with the Lognormal distribution','yaxis':{'type':'log'}}

py.plot(x,y,style=s,layout=l)

完全披露:我是Plotly团队的一员。

箱线图


4
在我绘图之前必须登录的基于Web服务的在线系统有什么优势?(在我评价它不适用于Matplotlib之前,我想先问一下。) - Arne Babenhauserheide
谢谢Arne。人们通常喜欢的好处包括共享、互动、协作和嵌入能力。更多信息请参见此处的IPython教程。 - Mateo Sanchez
这个能否在离线情况下使用,不需要使用网络服务? - Arne Babenhauserheide
1
@ArneBabenhauserheide,是的。这里是下载链接。 - Mateo Sanchez

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接