【问题标题】:matplotlib: how to change data point color based on it's boolean value consistently.matplotlib:如何根据其布尔值一致地更改数据点颜色。
【发布时间】:2016-12-06 09:35:30
【问题描述】:

我正在尝试使用 matplotlib 中的 pcolormesh 绘制一个布尔 numpy 数组。如果 numpy 数组中的单元格值为 True,我想将其显示为绿色,否则我想将其显示为红色。

这是我正在使用的代码 sn-p:

import matplotlib.pylab as plt
import numpy
from matplotlib import colors
matrix = numpy.array([[True, True, True]])
cmap = colors.ListedColormap(['green', 'red'], 'indexed')
fig, ax = plt.subplots()
ax.pcolormesh(matrix, cmap=cmap, edgecolor='black', linestyle='-', lw=1)
plt.show()

如果我将矩阵更改为: matrix = numpy.array([[False, False, False]]) 所有的单元格仍然是绿色而不是红色。

有没有办法使用 ListedColormap 一致地将布尔值分配给特定颜色?理想情况下,False 值将始终映射到红色,True 值将始终映射到绿色。

我正在使用 Python 2.7.6,Matplitlib 版本:1.4.3。提前致谢。

【问题讨论】:

    标签: python matplotlib


    【解决方案1】:

    好的,所以我找到了解决此问题的方法。

    基本上我在matplotlib中使用colormapsset_bad属性。

    首先,我将 numpy 数组中的所有 False 事件都屏蔽为“坏”数据

    matrix = numpy.ma.masked_where(matrix == False, matrix)
    

    其次,我创建一个仅指定绿色的 ListedColormap。

    cmap = colors.ListedColormap(['green'])
    

    然后我使用colormapsset_bad 属性将所有“坏”数据设置为红色。

    cmap.set_bad(color='red')
    

    这是完整的代码示例:

    import matplotlib.pylab as plt
    import numpy
    from matplotlib import colors
    
    # Example data
    matrix = numpy.array([[True, False, False]])
    
    # Mask the False occurences in the numpy array as 'bad' data
    matrix = numpy.ma.masked_where(matrix == False, matrix)
    
    # Create a ListedColormap with only the color green specified
    cmap = colors.ListedColormap(['green'])
    
    # Use the `set_bad` property of `colormaps` to set all the 'bad' data to red
    cmap.set_bad(color='red')
    
    fig, ax = plt.subplots()
    ax.pcolormesh(matrix, cmap=cmap, edgecolor='black', linestyle='-', lw=1)
    
    plt.show()
    

    【讨论】:

      猜你喜欢
      • 2014-12-30
      • 1970-01-01
      • 1970-01-01
      • 2016-06-22
      • 2018-07-08
      • 1970-01-01
      • 2017-07-10
      相关资源
      最近更新 更多