Python 使用彩色贴图和单个alpha值的散点图
关于这一点,有两个类似的问题: 但这两者都没有解决这个问题。我需要生成一个带有单个字母的散点图(如问题1所示),但我需要将其与给定的彩色地图相结合(如问题2所示) 这就是我想到的: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
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)))