python - Matplotlib : set "bad" colour in scatter plot

标签 python matplotlib scatter-plot

我在设置数据集中的 np.nan 值的颜色时遇到问题。 我已经设法让 camp.set_badimshow 图中工作,但它在 plt.scatter 中不起作用。

无论如何,我的主要目标是将特定颜色分配给不良值。

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

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')
cmap.set_bad(color='black', alpha = 1.)
plt.scatter(x, y, c=c, s=200, cmap=cmap)

这给了我以下输出:

Scatter plot with "bad" values

当然,我可以将数据集分成两个单独的集合并重叠绘制它们,但我确信有一个更清晰的解决方案。

最佳答案

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

enter image description here

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

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

enter image description here

关于python - Matplotlib : set "bad" colour in scatter plot,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38032759/

相关文章:

javascript - 如何向 CanvasJS 中的散点图添加一条最佳拟合线(趋势线)?

python - 如何在 python 中使用 awswrangler 从 S3 读取所有 Parquet 文件

python多进程启动失败

python - 在网站上搜索

python - 加载并绘图 %Y-%m-%d %H :%M:%S from a file

plot - 如何创建带标签的散点图?

python - pyserial 连接有效,但如何使用 ser.readline() 处理输出?

python - 在 Python 中使用跨子图的公共(public)线创建 Matplotlib 图形

python - 每行共享 y 轴

ios - 在 core-plot (iOS) 中动画化新数据插入