使用颜色图和单独的Alpha值的散点图

时间:2018-12-03 12:20:16

标签: python matplotlib scatter-plot alpha colormap

对此有两个类似的问题:

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

,但是这些都不能解决这个问题。我需要生成具有单个alpha的散点图(如问题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

在左边的图像是使用颜色图而不使用alpha的散点图的样子,而右边的图是我尝试向数据点添加单个alpha的图。

1 个答案:

答案 0 :(得分:1)

通常的颜色图具有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)))