scatter python cmap_python-3.x – 参数’c’和’cmap’在matplotlib散点图中的表现如何?...

关于如何着色散点的基本上有两种选择.

1.外部映射

您可以在外部将值映射到颜色,并将这些颜色的列表/数组提供给scatter的c参数.

z = np.array([1,0,1,0,1])

colors = np.array(["black", "green"])

plt.scatter(x,y, c=colors[z])

2.内部映射

除了显式颜色外,还可以提供值列表/数组,这些值应根据规范化和色彩映射映射到颜色.

> colormap是一个可调用的,它将浮点值介于0和1之间作为输入并返回RGB颜色.

>规范化是一种可调用的,它根据一些先前设置的限制将任意数字作为输入并输出另一个数字. Normalize的通常情况是提供vmin和vmax之间的值到0和1之间的线性映射.

从某些数据中获取颜色的自然方法是将两者联系起来,

cmap = plt.cm.Spectral

norm = plt.Normalize(vmin=4, vmax=5)

z = np.array([4,4,5,4,5])

plt.scatter(x,y, c = cmap(norm(z)))

这里,4的值将通过归一化映射到0,并且5的值被映射到1,使得色彩图提供两种最外面的颜色.

如果向c提供了数值的数组,则此过程在散布内部发生.

散点图创建一个PathCollection,它是ScalarMappable的子类. ScalarMappable由一个colormap,一个规范化和一个值数组组成.因此,上述内容是通过

plt.scatter(x,y, c=z, norm=norm, cmap=cmap)

如果要将最小和最大数据用作规范化的限制,则可以保留该参数.

plt.scatter(x,y, c=z, cmap=cmap)

这就是问题中输出始终为紫色和黄色点的原因,与提供给c的值无关.

回到将0和1数组映射到黑色和绿色的要求,您现在可以查看colormaps provided by matplotlib并查找包含黑色和绿色的色彩映射.例如. nipy_spectral colormap

这里的黑色位于色彩图的开头,绿色位于中间的某个位置,比如0.5.因此,需要将vmin设置为0和vmax,使得vmax * 0.5 = 1(将值映射为绿色为1),即vmax = 1./0.5 == 2.

import matplotlib.pyplot as plt

import numpy as np

x,y = np.random.rand(2,6)

z = np.array([0,0,1,1,0,1])

plt.scatter(x,y, c = z,

norm = plt.Normalize(vmin=0, vmax=2),

cmap = "nipy_spectral")

plt.show()

由于可能并不总是存在具有所需颜色的色彩图,并且因为从现有色彩图获得色彩位置可能不是直接的,所以替代方案是专门为所需目的创建新的色彩图.

在这里,我们可以简单地创建一个黑色和绿色两种颜色的色彩映射.

matplotlib.colors.ListedColormap(["black", "green"])

我们这里不需要任何规范化,因为我们只有两个值,因此可以依赖于自动规范化.

import matplotlib.pyplot as plt

import matplotlib.colors as mcolors

import numpy as np

x,y = np.random.rand(2,6)

z = np.array([0,0,1,1,0,1])

plt.scatter(x,y, c = z, cmap = mcolors.ListedColormap(["black", "green"]))

plt.show()

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值