p-r*_*bot 5 python matplotlib alpha-transparency boxplot
我正在构建一个函数来绘制自定义箱线图。我希望盒子的表面是平坦的,略带透明度,并且我希望在每个盒子的表面周围都有一条细的实线(不透明)。
我一直在尝试通过在调用后设置框的参数来尝试此操作,matplotlib.pyplot.boxplot如下所示。
当我查看要筛选的图时,它显示了我想要的内容。但是,当我使用创建 pdf 时,比如说,matplotlib.pyplot.savefig("output.pdf")线条不是实线,它也是透明的。当我放大 pdf 文件时,这种透明度很明显。
有没有人知道如何在保持箱线图面透明度的同时使线条不透明?
提前致谢。
from matplotlib import pyplot as plt
import numpy as np
data = {}
data['a'] = np.arange(12)+1
data['b'] = np.arange(14)+1
data['c'] = np.arange(8)+1
cols = ['red', 'blue', 'green']
controls = ['trt_a', 'trt_b', 'trt_c']
fig, ax = plt.subplots()
boxplot_dict = ax.boxplot([data[x] for x in ['a', 'b', 'c']], \
positions = [1, 1.5, 2], labels = controls, \
patch_artist = True, widths = 0.25)
for b, c in zip(boxplot_dict['boxes'], cols):
b.set_alpha(0.6)
b.set_edgecolor(c) # or try 'black'
b.set_facecolor(c)
b.set_linewidth(1)
ax.set_ylim([0,16])
plt.savefig("test_boxplot.pdf")
plt.close()
Run Code Online (Sandbox Code Playgroud)
我已经尝试了此处为直方图给出的建议,方法是将颜色设置为包含 alpha 级别[(0, 0, 1, 0.6), (1, 0, 0, 0.6), (0, 1, 0, 0.6)],但这似乎不适用于箱线图。
set_alpha更改面颜色和边缘颜色,为了避免这种情况,您可能需要考虑将 RGBA 值直接传递给面颜色:
#cols = ['red', 'blue', 'green']
cols = [[1,0,0,0.5],
[0,1,0,0.5],
[0,0,1,0.5]]
controls = ['trt_a', 'trt_b', 'trt_c']
fig, ax = plt.subplots()
boxplot_dict = ax.boxplot([data[x] for x in ['a', 'b', 'c']], \
positions = [1, 1.5, 2], labels = controls, \
patch_artist = True, widths = 0.25)
for b, c in zip(boxplot_dict['boxes'], cols):
#b.set_alpha(0.6)
b.set_edgecolor('k') # or try 'black'
b.set_facecolor(c)
b.set_linewidth(1)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
7173 次 |
| 最近记录: |