【问题标题】:python matplotlib legend for opacity用于不透明度的 python matplotlib 图例
【发布时间】:2017-06-12 21:55:30
【问题描述】:

x = [1, 2, 3, 4, 5]
y = [2, 3, 5, 6, 4]
c = [(1, 0, 0, 1),(1, 0, 0, .8),(0, 0, 0, .5),(0, 0, 0, .8),(1, 0, 0, .3)]

plt.scatter(x,y,c=c,s=55)
plt.legend(handles=[mpatches.Patch(color='red',label='Type1'),
                    mpatches.Patch(color='black',label='Type2')])
plt.show()

我正在绘制一个与上述数据集有些相似的数据集。在我的数据集中,颜色代表数据点的分类,不透明度代表其误差的大小(数据集相当密集,使得误差线不可行。)

我想知道是否可以创建某种不透明度图例,可能是一排不透明度从 0 到 1 不等的黑点,每个点都标有相关的错误。

谢谢!

【问题讨论】:

    标签: python matplotlib legend opacity scatter-plot


    【解决方案1】:

    您可以添加另一个带有空散点图的图例作为句柄,其中散点的 alpha 值是不同的。

    例如要使用从 0 到 1 的 6 种不同的不透明度,您可以这样做:

    import matplotlib.pyplot as plt
    import matplotlib.patches as mpatches
    
    x = [1, 2, 3, 4, 5]
    y = [2, 3, 5, 6, 4]
    c = [(1, 0, 0, 1),(1, 0, 0, .8),(0, 0, 0, .5),(0, 0, 0, .8),(1, 0, 0, .3)]
    
    plt.scatter(x,y,c=c,s=55)
    leg1 = plt.legend(handles=[mpatches.Patch(color='red',label='Type1'),
                        mpatches.Patch(color='black',label='Type2')], loc="upper left")
    plt.gca().add_artist(leg1)
    
    error = [0,.2,.4,.6,.8,1]
    h = [plt.scatter([],[],s=55, c=(0,0,0,i)) for i in error]
    plt.legend(h, error, loc="upper right")
    
    plt.show()
    

    【讨论】:

      【解决方案2】:

      如果可以选择使用亮度而不是不透明度来表示错误,您可以使用预定义的颜色图来显示如下所示的颜色条。否则,我认为您可以尝试定义自己的颜色图。

      from matplotlib import pyplot as plt
      from matplotlib import patches as mpatches
      
      t1_x = [1, 2, 5]
      t1_y = [2, 3, 4]
      t1_err = [1, .8, .3]
      t2_x = [3, 4]
      t2_y = [5, 6]
      t2_err = [.5, .8]
      
      plt.figure(figsize=[8, 4])
      t1_sc = plt.scatter(t1_x, t1_y, s=55, vmin=0, vmax=1, 
                          c=t1_err, cmap=plt.cm.get_cmap('Reds'))
      t2_sc = plt.scatter(t2_x, t2_y, s=55, vmin=0, vmax=1, 
                          c=t2_err, cmap=plt.cm.get_cmap('Greys'))
      plt.colorbar(t1_sc)
      plt.colorbar(t2_sc)
      plt.legend(handles=[mpatches.Patch(color='red',label='Type1'),
                          mpatches.Patch(color='black',label='Type2')])
      plt.show()
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2018-01-19
        • 2013-09-24
        • 1970-01-01
        • 2013-09-27
        • 1970-01-01
        • 2012-03-05
        • 1970-01-01
        相关资源
        最近更新 更多