Matplotlib:在散点图中设置 "bad" 颜色
Matplotllib: set "bad" colour in scatter plot
我在设置数据集中 np.nan
值的颜色时遇到问题。
我已经设法让 camp.set_bad
在 imshow
图中工作,但它在 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)
这给了我以下输出:
当然,我可以将数据集分成两个单独的集合并绘制它们,但我很确定有一个更简洁的解决方案。
cmap中没有黑色plasma
。
数组 c
必须存储当前颜色图 cmap
中 select 颜色的索引。如果您将 c
设置为 NaN
,这意味着您没有在散点图上获得这些索引(4 和 8:12)的对象。
第一个变体是手动设置 selected 索引的颜色:
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()
我在设置数据集中 np.nan
值的颜色时遇到问题。
我已经设法让 camp.set_bad
在 imshow
图中工作,但它在 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)
这给了我以下输出:
当然,我可以将数据集分成两个单独的集合并绘制它们,但我很确定有一个更简洁的解决方案。
cmap中没有黑色plasma
。
数组 c
必须存储当前颜色图 cmap
中 select 颜色的索引。如果您将 c
设置为 NaN
,这意味着您没有在散点图上获得这些索引(4 和 8:12)的对象。
第一个变体是手动设置 selected 索引的颜色:
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()