【问题标题】:Scatter plot using colormap and individual alpha values使用颜色图和单个 alpha 值的散点图
【发布时间】:2019-05-04 17:56:14
【问题描述】:

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

  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()

但结果不是我所期望的:

左边的图像是使用颜色图和没有 alpha 的散点图的样子,右边的图是我尝试将单个 alpha 添加到数据点。

【问题讨论】:

    标签: python matplotlib scatter-plot alpha colormap


    【解决方案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)))
    

    【讨论】:

    • 我在发布问题之前确实尝试过规范化,我使用了:z_norm = (z - z.min()) / (z.max() - z.min()),但它没有用。现在我意识到它不起作用,因为我使用 Python 2.7 运行它,如上所示获得z_norm = [0 0 0 0 0 0 0 0 0 1]。在 Python 3.7 中,同一行给出了z_norm = [0. 0.111 0.222 0.333 0.444 0.555 0.666 0.777 0.888 1.],它按预期工作。谢谢!
    • 这里建议的两行在 py2 和 py3 中给出了相同的结果。
    猜你喜欢
    • 2014-09-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-05-20
    • 2018-07-30
    • 2015-07-17
    • 2015-05-28
    相关资源
    最近更新 更多