代码之家  ›  专栏  ›  技术社区  ›  Gabriel

使用彩色贴图和单个alpha值的散点图

  •  0
  • Gabriel  · 技术社区  · 5 年前

    1. Individual alpha values in scatter plot
    2. Add alpha to an existing matplotlib colormap

    但这两者都没有解决这个问题。我需要生成一个带有单个字母的散点图(如问题1所示),但我需要将其与给定的彩色地图相结合(如问题2所示)

    这就是我想到的:

    import numpy as np
    import matplotlib.pylab as plt
    from matplotlib.colors import ListedColormap
    
    x = np.arange(10)
    y = np.arange(10)
    # These are the colors for my data
    z = np.arange(10)
    # These are the alpha values for my data
    alphas = np.linspace(0.1, 1, 10)
    
    # Color map I want to use
    cm = plt.cm.get_cmap('viridis')
    # Get the colormap colors for my data
    my_cmap = cm(z)
    # Set alpha
    my_cmap[:, -1] = alphas
    # Create new colormap
    my_cmap = ListedColormap(my_cmap)
    
    plt.subplot(121)
    plt.scatter(x, y, cmap=cm, c=z)
    plt.subplot(122)
    plt.scatter(x, y, cmap=my_cmap, c=z)
    plt.show()
    

    但结果并不是我所期望的:

    enter image description here

    其中,左边的图像是使用彩色贴图和无字母的散点图,右边的图是我尝试将单个字母添加到数据点的图。

    1 回复  |  直到 5 年前
        1
  •  2
  •   ImportanceOfBeingErnest    5 年前

    通常的颜色贴图有256种颜色。在这里,您只选择前10个,它们看起来大致相同(都是深紫色)。

    my_cmap = cm(z) 通过

    my_cmap = cm(plt.Normalize(z.min(), z.max())(z))
    

    my_cmap = cm(np.linspace(0,1,len(z)))