gpt4 book ai didi

python - 带有自定义 cmap 的 matplotlib 散点图 - 颜色不正确

转载 作者:行者123 更新时间:2023-11-28 22:41:28 26 4
gpt4 key购买 nike

所以我按照一种模式为我的散点图创建自定义颜色图和 cbar。我正在创建 4 个子图,每个子图涵盖用于为点提供颜色的参数的不同范围。此参数的值范围从 1e-10 到 1.0。

我做了以下事情:

cmap = plt.cm.jet
# extract all colors from the .jet map
cmaplist = [cmap(i) for i in range(cmap.N)]
# force the first color entry to be grey
cmaplist[0] = (.5,.5,.5,1.0)
# create the new map
cmap = cmap.from_list('Custom cmap', cmaplist, cmap.N)

# define the bins and normalize
bounds = np.linspace(-10,0,11)
norm = mpl.colors.BoundaryNorm(bounds, cmap.N)
...
fig, ((ax1, ax2), (ax3, ax4)) = plt.subplots(2, 2, sharex='col', sharey='row', figsize=(20,20))
...
ax1.scatter(xcoord[rng1], ycoord[rng1], s=massFilt[rng1]/dotNorm,
c=np.ma.log10(Zfilt[rng1]), cmap=cmap)
ax2.scatter(xcoord[rng2],ycoord[rng2], s=massFilt[rng2]/dotNorm,
c=np.ma.log10(Zfilt[rng2]), cmap=cmap)
ax3.scatter(xcoord[rng3], ycoord[rng3], s=massFilt[rng3]/dotNorm,
c=np.ma.log10(Zfilt[rng3]), cmap=cmap)
ax4.scatter(xcoord[rng4], ycoord[rng4], s=massFilt[rng4]/dotNorm,
c=np.ma.log10(Zfilt[rng4]), cmap=cmap)

rngs定义为

rng1 = (Zfilt < 2.e-7)
rng2 = ((Zfilt >= 2.e-7) & (Zfilt < 1.e-4))
rng3 = ((Zfilt >= 1.e-4) & (Zfilt < 1.e-2))
rng4 = (Zfilt >= 1.e-2)

所以第一个面板只包含那些小于 2e-7 的点,并且所有的点都正确着色......我已经验证过滤器工作正常:例如 Zfilt[rng4] 只包含 Zfilt > 1e- 的点2 ... 但不知何故我在 rng2 和 rng3 中看到了应该只用于 rng1 的颜色!!??见附件。

有什么想法吗?我做错了什么?

All points in panel 2 (top right) ARE less than 1e-4 and should be green, blue or grey... NOT RED?!?

这是 Zfilt[rng2] 的示例 -

Z values rng2  [-4.23451696 -4.35974369 -5.18479833 -6.17304647 -4.48839191 -5.16774006
-4.12047222 -6.11491263 -5.81392662 -4.6491248 -4.75038775 -5.06640103
-4.20821705 -4.12556725 -4.58661378 -4.17023495 -5.40845781 -4.54981553
-5.82830048 -4.11185471 -4.43155534 -6.17025186 -4.88154584 -5.00024704
-4.13626926 -5.57797731 -6.0617742 -5.33182163 -5.44963247 -5.88409509
-6.16903327 -5.70808154 -4.88578943 -4.00873256 -4.1457824 -4.45174817
-5.43829583 -4.32470978 -4.11634754 -5.1141915 -5.13310282 -4.15469421
...

最佳答案

scatter() 不知道您的数据的假定范围,因此它在它看到的整个范围内应用颜色图,即从提供的数组的最小值到最大值.由于您想要不同的行为(所有子图的范围相同,无论数据如何),您需要通过 vminvmax 参数明确指定范围:

ax1.scatter(xcoord[rng1], ycoord[rng1], s=massFilt[rng1]/dotNorm,
c=np.ma.log10(Zfilt[rng1]), cmap=cmap,
vmin=-10, vmax=0)
ax2.scatter(xcoord[rng2],ycoord[rng2], s=massFilt[rng2]/dotNorm,
c=np.ma.log10(Zfilt[rng2]), cmap=cmap,
vmin=-10, vmax=0)
# etc

关于python - 带有自定义 cmap 的 matplotlib 散点图 - 颜色不正确,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32578479/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com