Python Matplotllib:set";“坏的”;散点图中的颜色

Python Matplotllib:set";“坏的”;散点图中的颜色,python,matplotlib,scatter-plot,Python,Matplotlib,Scatter Plot,我在设置数据集中np.nan值的颜色时遇到问题。 我已经设法让camp.set\u bad在imshow绘图中工作,但它在plt.scatter中不工作 无论如何,我的主要目标是为坏值指定特定的颜色 这就是我认为它会起作用的方式(但事实并非如此;-) 这为我提供了以下输出: 当然,我可以将数据集分为两个单独的集合,并对它们进行过度渲染,但我确信有一个更干净的解决方案。cmapplasma中没有黑色 数组c必须存储从当前颜色映射cmap中选择的颜色索引。如果将c设置为NaN,则表示散点图上没有这

我在设置数据集中
np.nan
值的颜色时遇到问题。 我已经设法让
camp.set\u bad
imshow
绘图中工作,但它在
plt.scatter
中不工作

无论如何,我的主要目标是为坏值指定特定的颜色

这就是我认为它会起作用的方式(但事实并非如此;-)

这为我提供了以下输出:


当然,我可以将数据集分为两个单独的集合,并对它们进行过度渲染,但我确信有一个更干净的解决方案。

cmap
plasma
中没有黑色

数组
c
必须存储从当前颜色映射
cmap
中选择的颜色索引。如果将
c
设置为
NaN
,则表示散点图上没有这些索引(4和8:12)的对象

第一种变体是手动设置选定索引的颜色:

import matplotlib.pyplot as plt
import numpy as np
n = 20
x = y = np.linspace(1, 10, n)
c = np.random.random_sample((n,))
#c[4] = np.nan
#c[8:12] = np.nan
c[4]=c[8:12]=0 # first color use to mark 4 and 8:12 elements
cmap = plt.get_cmap('plasma')
plt.scatter(x, y, s=200, c=c, cmap=cmap)
plt.show()

第二种变体是绘制两个散点图:

import matplotlib.pyplot as plt
import numpy as np

n = 20
x = y = np.linspace(1, 10, n)
c = np.random.random_sample((n,))
c[4] = np.nan
c[8:12] = np.nan
cmap = plt.get_cmap('plasma')

# plot good values
indices = ~np.isnan(c)
plt.scatter(x[indices], y[indices], s=200, c=c[indices], cmap=cmap)
# plot bad values
plt.scatter(x[~indices], y[~indices], s=200, c='k')

plt.show()

只是一个猜测,但是
plt.scatter
的文档说“只有当c是一个浮点数组时才使用cmap”,而关于
plt.imshow
没有类似的说法好吧,第二种方法实际上是我目前正在做的。因此,目前还没有更简单的解决方案。无论如何谢谢你!这是不可能的,因为等离子体颜色贴图不包括黑色,并且
c
必须存储颜色贴图中的颜色编号。
import matplotlib.pyplot as plt
import numpy as np

n = 20
x = y = np.linspace(1, 10, n)
c = np.random.random_sample((n,))
c[4] = np.nan
c[8:12] = np.nan
cmap = plt.get_cmap('plasma')

# plot good values
indices = ~np.isnan(c)
plt.scatter(x[indices], y[indices], s=200, c=c[indices], cmap=cmap)
# plot bad values
plt.scatter(x[~indices], y[~indices], s=200, c='k')

plt.show()