我有一个(x,y)-散点图,其中每个点都与一种颜色关联。但是,某些点没有有效的颜色,而是被指定为NaN。我想包括这些点,但是要用颜色图未包含的颜色来显示它们。
这是示例代码:
import numpy as np
import matplotlib.colors as mcol
import matplotlib.pyplot as plt
numPoints = 20
nanFrequency = 3
xVec = np.arange(numPoints, dtype=float)
yVec = xVec
colorVec = np.linspace(0,1,numPoints)
colorVec[range(0, numPoints, nanFrequency)] = np.nan
colormap = mcol.LinearSegmentedColormap.from_list("Blue-Red-Colormap", ["b", "r"])
plt.scatter(xVec, yVec, c=colorVec, cmap=colormap)
由于其无效的颜色值,因此未显示第三点。根据我的代码,我希望这些点以黄色显示。为什么这行不通?
请注意,这里有一个related post concerning imshow(),上面的代码是从中得到启发的。那里提出的解决方案似乎对我不起作用。
非常感谢。
答案 0 :(得分:2)
当然,您需要为色图colormap.set_bad("yellow")
设置所需的黄色。
然后,这是matplotlib(#4354)中一个由来已久的错误,所幸已修复(#12422)。
因此,从matplotlib 3.1开始,您可以使用plotnonfinite=True
参数在散点图中包含被遮罩的点或无效点。
import numpy as np
import matplotlib.colors as mcol
import matplotlib.pyplot as plt
numPoints = 20
nanFrequency = 3
xVec = np.arange(numPoints, dtype=float)
yVec = xVec
colorVec = np.linspace(0,1,numPoints)
colorVec[range(0, numPoints, nanFrequency)] = np.nan
colormap = mcol.LinearSegmentedColormap.from_list("Blue-Red-Colormap", ["b", "r"])
colormap.set_bad("yellow")
plt.scatter(xVec, yVec, c=colorVec, cmap=colormap, plotnonfinite=True)
plt.show()
答案 1 :(得分:1)
未绘制您的python
值的原因是,matplotlib的散布图目前已将其过滤,然后再将其提供给颜色图。
要显示DEF_map = {}
with open('in.txt') as file:
for line in file.readlines()[1:]:
s = line.split()
if s[1] not in DEF_map:
DEF_map[s[1]] = []
DEF_map[s[1]].append(float(s[3]))
print("DEF Average of LMN")
for DEF, LMN_list in DEF_map.items():
print("{}\t{}".format(DEF, sum(LMN_list)/len(LMN_list)))
条目,可以手动为它们分配一个具有特殊含义的伪值。例如,由于列表在NaN
范围内,因此可以定义任何值NaN
都具有特殊的颜色。为此,您将必须固定色轴的范围,并为该范围之外的条目指定一种颜色(在这种情况下,该颜色要比最大值更大)。
基本上,您将使用:
[0, 1]
例如:
> 1
哪个会生成两个子图:顶部与您所拥有的子图对应,底部使用虚拟值并为其分配黄色: