Matplotlib:使用色彩映射并为不同的值使用不同的标记

时间:2017-07-03 08:53:38

标签: python matplotlib scatter-plot colormap

我目前有一堆(x,y)点存储在数组xy中,我使用第三个数组Kmap着色,使用内置cmap选项中的matplotlib。

plt.scatter(xy[:, 0], xy[:, 1], s=70, c=Kmap, cmap='bwr')

这很好。现在,我想做一些额外的事情。在继续使用cmap的同时,我想根据Kmap值是否> 0来使用不同的标记,< 0或= 0。我该怎么做呢?

注意:我可以想象使用if语句分解点并使用不同的标记分别绘制它们。但是,我不知道如何对这些值应用连续的cmap

1 个答案:

答案 0 :(得分:2)

将数据集分开看起来是一个不错的选择。要保持颜色之间的一致性,可以使用散点方法的vmin,vmax参数

import matplotlib.pyplot as plt
import numpy as np


#generate random data
xy = np.random.randn(50, 2)
Kmax = np.random.randn(50)

#data range
vmin, vmax = min(Kmax), max(Kmax)

#split dataset
Ipos = Kmax >= 0. #positive data (boolean array)
Ineg = ~Ipos      #negative data (boolean array)


#plot the two dataset with different markers
plt.scatter(x = xy[Ipos, 0], y = xy[Ipos, 1], c = Kmax[Ipos], vmin = vmin, vmax = vmax, cmap = "bwr", marker = "s")
plt.scatter(x = xy[Ineg, 0], y = xy[Ineg, 1], c = Kmax[Ineg], vmin = vmin, vmax = vmax, cmap = "bwr", marker = "o")

plt.show()