【问题标题】:Colormap with matplotlib使用 matplotlib 的颜色图
【发布时间】:2021-03-02 13:07:41
【问题描述】:

我正在尝试使用 matplotlib 表示 3D 散点数据。

我有 3 个要绘制的数组:

  • 具有点 X 坐标的数组
  • 具有点 Y 坐标的数组
  • 具有与每个点关联的参数值的数组(其坐标在 X[] 和 Y[] 中描述的点)

我想要的是:

  • 每个 (X,Y) 对的 2D 点云(散点图)图
  • 每个点根据第三个数组中对应的值有一个颜色
  • 表示链接参数的范围和值的颜色条

我遇到了颜色映射问题。 这是一个带有 cmets 的最小代码:

import numpy as np
import matplotlib.pyplot as plt
from matplotlib import cm
from matplotlib.colors import ListedColormap

X = [] # x coordinates array
Y = [] # y coordinates array
parameter = [] # linked parameter values array, each value represents a point. This array is ordered accordingly

# next : the arrays are populated ..
# now I need to plot the point cloud (X,Y) with each point having a color representing the value of the corresponding linked parameter.. 

我阅读了一些教程并了解我需要为参数创建自定义颜色图。我尝试根据链接参数创建颜色图:

viridisBig = cm.get_cmap('viridis', 512)
newcmp = ListedColormap(viridisBig(np.linspace(np.min(PARAMETER), np.max(PARAMETER), 512)))

然后调用散点图:

plt.scatter(X, Y, cmap=newcmp)
plt.colorbar(cm.ScalarMappable(cmap=newcmp))
plt.show()

上面的代码不能正常工作。 它正在绘制具有独特颜色(蓝色)的散点图,并且侧面的颜色条为黄色,如所附屏幕截图所示:

我想我遗漏了一些与创建颜色图相关的内容,但我还没有找到任何关于这个简单案例的明确示例。 有什么想法吗?

提前致谢!

【问题讨论】:

  • 您在scatter 中缺少第三个参数 (s)。该参数用于确定大小和颜色
  • 颜色图需要一个介于 0 和 1 之间的输入,它们与 norms 一起将其他值转换为该范围。此外,很难从颜色图中获得超过 256 个不同的颜色值。
  • 感谢您的 cmets!通过在将颜色图用作散点函数的参数之前对参数进行规范化来解决问题。

标签: python matplotlib anaconda3


【解决方案1】:

在将参数与颜色图一起用作散点函数的参数之前,通过对参数进行归一化来解决问题:

colormap = plt.cm.get_cmap('cool', 512)
normalize = mpl.colors.Normalize(vmin=PARAMETER.min(), vmax=PARAMETER.max())

然后:

plt.scatter(X, Y, c=PARAMETER, s=5, cmap=colormap, norm=normalize)

【讨论】:

    猜你喜欢
    • 2018-02-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-02-25
    • 1970-01-01
    • 2012-04-11
    相关资源
    最近更新 更多