【问题标题】:Matplotlib colorbar for PatchCollection overrides colorsPatchCollection 的 Matplotlib 颜色栏覆盖颜色
【发布时间】:2016-11-08 18:23:33
【问题描述】:

我正在根据变量值中设置的值绘制补丁。

pc = PatchCollection(patches, match_original=True)  

norm = Normalize()
cmap = plt.get_cmap('Blues')
pc.set_facecolor(cmap(norm(values)))
ax.add_collection(pc)

现在我还想要一个额外的颜色条。如果我插话(例如在 set_facecolor 之前)

pc.set_array(values) # values
plt.colorbar(pc)

它有效,但现在所有颜色都变成了灰度。以下set_facecolor 不会改变任何东西。即使当我在plt.colorbar() 中添加cmap= 命令时,一切都保持在灰度中。我不知道该怎么办。

【问题讨论】:

    标签: python matplotlib


    【解决方案1】:

    您是在问如何通过特定的颜色图为集合着色?

    只需设置颜色图 (cmap) 以及 array

    例如:

    import numpy as np
    import matplotlib.pyplot as plt
    from matplotlib.collections import PatchCollection
    
    num = 10
    data = np.random.random((num, 2))
    values = np.random.normal(10, 5, num)
    
    # I'm too lazy to draw irregular polygons, so I'll use circles
    circles = [plt.Circle([x, y], 0.1) for (x,y) in data]
    col = PatchCollection(circles)
    
    col.set(array=values, cmap='jet')
    
    fig, ax = plt.subplots()
    
    ax.add_collection(col)
    ax.autoscale()
    ax.axis('equal')
    
    fig.colorbar(col)
    plt.show()
    

    解释你的问题发生了什么:

    对于集合,面颜色要么手动设置(即set_facecolors),要么颜色映射到由颜色条控制的一系列值(set_array)。这两个选项是互斥的。因此,调用set_array 后,原来的facecolors 将被忽略。

    【讨论】:

    • 你知道我怎样才能用不透明度添加颜色吗,@Joe?我正在尝试这样做,但没有成功。 stackoverflow.com/questions/30966008/… 谢谢。
    • @pceccon - 不知道为什么你的问题被否决(然后关闭)。这是个好问题。无论如何,如果您使用set_array,则不透明度要么由颜色图控制,要么由单个全局alpha 值控制。你到底想做什么?如果您希望不透明度随着颜色的变化而定期变化,这是可能的(您需要自定义颜色图)。
    • 嗨@Joe,经过两次反对票(也不知道为什么)和大量研究后,我设法做到了并删除了这个问题。谢谢你试图帮助我。 (:
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-08-02
    • 2018-08-12
    • 2020-07-09
    • 2018-11-12
    • 2017-08-09
    相关资源
    最近更新 更多