【问题标题】:Matplotlib: how to have a transparent box plot face while a non-transparent line edge?Matplotlib:如何在不透明的线边缘有透明的箱形图面?
【发布时间】:2015-11-16 16:10:05
【问题描述】:

我正在构建一个函数来绘制自定义箱线图。我希望盒子的表面是简单的,有轻微的透明度,我希望每个盒子表面周围都有一条细实线(不透明)。

我一直在尝试通过在调用matplotlib.pyplot.boxplot 后设置框的参数,如下所示。

当我在屏幕上查看情节时,它会显示我想要的内容。但是,当我使用 matplotlib.pyplot.savefig("output.pdf") 创建 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()

我已经尝试了针对直方图 here 给出的建议,方法是将颜色设置为包含 alpha 级别 [(0, 0, 1, 0.6), (1, 0, 0, 0.6), (0, 1, 0, 0.6)],但这似乎不适用于箱形图。

【问题讨论】:

    标签: python matplotlib boxplot alpha-transparency


    【解决方案1】:

    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)
    

    【讨论】:

      【解决方案2】:

      您可以尝试为 boxprops 设置facecolor = '#1b9e77',这可以是透明色或纯色。

      plt.boxplot(... , boxprops=dict(facecolor=(0,0,0,0))
      

      【讨论】:

        猜你喜欢
        • 2015-04-08
        • 2020-02-15
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-09-21
        • 1970-01-01
        • 1970-01-01
        • 2015-06-12
        相关资源
        最近更新 更多