【问题标题】:matplotlib fill_between facecolor alpha vs edgecolor alpha?matplotlib fill_between facecolor alpha vs edgecolor alpha?
【发布时间】:2018-07-24 00:20:46
【问题描述】:

有没有办法为facecoloredgecolor 指定不同的alpha?或者有没有办法用非 alpha 边缘颜色绘制一个 alpha 填充区域也适用于图例

这不是我想要的...

axs.fill_between(xvalues, tupper_w, tlower_w, facecolor='dimgray', edgecolor='dimgray', alpha=0.25, label='$measured\quad\sigma$')
axs.fill_between(xvalues, pupper_w, plower_w, facecolor='orange', edgecolor='orange', alpha=0.25, label='$predicted\quad\sigma$')
axs.plot(xvalues, tcurvesavg_w, color='dimgray', label='$\overline{measured}$', ls='--')
axs.plot(xvalues, pcurvesavg_w, color='orange', label='$\overline{predicted}$', ls='--')


这就是我想要的(但有适当的传说):

axs.fill_between(xvalues, tupper, tlower, facecolor='dimgray', alpha=0.25, label='$measured\quad\sigma$')
axs.fill_between(xvalues, pupper, plower, facecolor='orange', alpha=0.25, label='$predicted\quad\sigma$')
axs.plot(xvalues, tupper, color='dimgray', lw=0.5)
axs.plot(xvalues, tcurvesavg, color='dimgray', label='$\overline{measured}$', ls='--')
axs.plot(xvalues, tlower, color='dimgray', lw=0.5)
axs.plot(xvalues, pupper, color='orange', lw=0.5)
axs.plot(xvalues, pcurvesavg, color='orange', label='$\overline{predicted}$', ls='--')
axs.plot(xvalues, plower, color='orange', lw=0.5)

【问题讨论】:

    标签: python matplotlib


    【解决方案1】:

    您不能通过 alpha 参数指定不同的 alpha 值。但是,您可以使用 Alpha 通道定义 facecoloredgecolor 中的每一个,例如对于不透明度为 40% 的红色

    facecolor=(1,0,0,.4)
    

    然后直接应用到图例中。

    import matplotlib.pyplot as plt
    import numpy as np
    
    x = np.arange(0.0, 2, 0.01)
    y1 = np.sin(2*np.pi*x)
    y2 = 1.2*np.sin(4*np.pi*x)-.9
    
    fig, ax = plt.subplots()
    
    ax.fill_between(x, y1, y1+.5, facecolor=(1,0,0,.4), edgecolor=(0,0,0,.5), label="Label 1")
    ax.fill_between(x, y2, y2-.5, facecolor=(0,0,1,.4), edgecolor=(0,0,0,.5), label="Label 1")
    
    ax.legend()
    plt.show()
    

    【讨论】:

      【解决方案2】:

      立即查看fill_between alpha 和一般fill_between documentation,它似乎不受支持。 legend documentation 似乎也没有提供在绘图后添加边框的选项。

      在您的第二个代码 sn-p 中,如果您能弄清楚如何使绘图和填充函数具有单个句柄,那么图例应该会自动格式化。类似于以下内容(改编自this similar, but not quite duplicate StackExchangePost):

      import matplotlib.patches as mpatches
      import matplotlib.pyplot as plt
      import numpy as np
      
      xvalues = np.linspace(0,1,11)
      tcurvesavg = np.linspace(0,1,11)
      p1, = plt.plot(xvalues, tcurvesavg , c='r')  # notice the comma!
      p2 = plt.fill_between(xvalues, tcurvesavg -0.2, tcurvesavg +0.2, color='r', alpha=0.5)
      plt.legend(((p1,p2),), ('Entry',))
      plt.show()
      

      (作为大多数 matplotlib 问题的非自动解决方法,另存为 svg(类似于 this post)并在像 Inkscape 这样的矢量图形程序中添加边框。你不应该失去分辨率,而且仍然可以把它在报告等中)

      【讨论】:

      • 我会试试的,谢谢!是的,如果找不到程序解决方案,我将对最终的结果进行后处理。我在所有实验中生成了数百个不同的图,所以我试图确保它从一开始就有效。但有时需要后期处理:/
      • @delrocco TheImportanceOfBeingErnest 的答案绝对符合您的要求,您应该将其标记为已接受。
      猜你喜欢
      • 2020-09-30
      • 1970-01-01
      • 1970-01-01
      • 2014-08-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-03-24
      相关资源
      最近更新 更多