Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/297.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 使用彩色贴图和单个alpha值的散点图_Python_Matplotlib_Scatter Plot_Alpha_Colormap - Fatal编程技术网

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

Python 使用彩色贴图和单个alpha值的散点图,python,matplotlib,scatter-plot,alpha,colormap,Python,Matplotlib,Scatter Plot,Alpha,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 fo

关于这一点,有两个类似的问题:

  • 但这两者都没有解决这个问题。我需要生成一个带有单个字母的散点图(如问题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()
    
    但结果并不是我所期望的:


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

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

    我想在将
    my_cmap=cm(z)
    替换为

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


    在发布问题之前,我确实尝试过规范化,我使用了:
    z_norm=(z-z.min())/(z.max()-z.min())
    ,但它不起作用。现在我意识到它不起作用了,因为我用Python2.7运行它,其中
    z_norm=[0 0 0 0 0 1]
    如上图所示获得。在Python3.7中,同一行给出了
    z_norm=[0.0.111 0.222 0.333 0.444 0.555 0.666 0.777 0.888 1.]
    ,其效果与预期一致。非常感谢。这里建议的两行在py2和py3中给出相同的结果。
    my_cmap = cm(np.linspace(0,1,len(z)))