我有一个 Dataframe ,其中包含点的x,y和z坐标以及“计数”,每个数据点的数字在1到187之间。我想将“计数”与颜色梯度相关联,例如1是绿色,187是红色,然后用x,y和z坐标制作数据点的散点图,其中每个数据点的颜色是“计数”的编码信息。我发现代码的颜色梯度非常混乱,你能帮助我吗?
编辑:zelusp完全回答了我的问题,谢谢。
编辑1:我想知道我是否应该写单独的问题,但因为它是关于同一段代码,也许我可以达到的答案只是编辑前一个问题。最近我换了笔记本电脑,安装了Ubuntu 18。在我的新机器上。这段代码在Ubuntu 16上运行得很好。04,但在我的新机器上不起作用。我的代码是:
cmap = plt.cm.rainbow
norm = mpl.colors.Normalize(vmin=np.min(df3.h_count), vmax=np.max(df3.h_count))
fig=plt.figure()
ax1=fig.add_subplot(111, projection='3d')
ax1.scatter(df3.zm_bin, df3.sfr_bin, 12.+np.log10(df3.medijana), s=10, c=cmap(norm(df3.h_count)), marker='o')
ax1.set_xlim(8,12.5)
ax1.set_xlabel('Log(Mz)')
ax1.set_ylabel('LogSFR') #treba invertovati
ax1.set_zlabel('12+log(Z)')
ax1.invert_yaxis()
sm = plt.cm.ScalarMappable(cmap=cmap, norm=norm)
sm.set_array([])
fig.colorbar(sm)
我得到的错误是这样的:
Traceback (most recent call last):
File "load_subhalos.py", line 233, in <module>
ax1.scatter(df3.zm_bin, df3.sfr_bin, 12.+np.log10(df3.medijana), s=10, c=cmap(norm(df3.h_count)), marker='o')
File "/usr/local/lib/python2.7/dist-packages/matplotlib/colors.py", line 938, in __call__
result, is_scalar = self.process_value(value)
File "/usr/local/lib/python2.7/dist-packages/matplotlib/colors.py", line 924, in process_value
result = np.ma.array(data, mask=mask, dtype=dtype, copy=True)
File "/usr/local/lib/python2.7/dist-packages/numpy/ma/core.py", line 6358, in array
ndmin=ndmin, shrink=shrink, order=order)
File "/usr/local/lib/python2.7/dist-packages/numpy/ma/core.py", line 2784, in __new__
order=order, subok=True, ndmin=ndmin)
TypeError: float() argument must be a string or a number
我没有改变任何代码,唯一的变化是新的机器和操作系统。你知道我为什么会有这个问题吗?
1条答案
按热度按时间kognpnkq1#
我建议你浏览一下matplotlib上的这些帖子:
YlOrRd
颜色Map,因为它会更容易阅读cmap
和norm
变量的使用以及它们在cmap(norm(df.c.values))
中的使用。考虑到这一点,我做了以下工作:
您可能对colorspacious感兴趣