Python matplotlib.SCAST color参数不接受numpy数组

Python matplotlib.SCAST color参数不接受numpy数组,python,arrays,numpy,matplotlib,scatter-plot,Python,Arrays,Numpy,Matplotlib,Scatter Plot,我使用matplotlib编写了以下python绘图脚本: import pynbody as pyn import numpy as np import matplotlib.pyplot as plt import glob s = pyn.load('./ballsV2.00001') sl = s.g[np.where((s.g['z'] < 0.005) & (s.g['z']>-0.005))] sx = s.s['x'][0] sy = s.s['y'][0

我使用matplotlib编写了以下python绘图脚本:

import pynbody as pyn
import numpy as np
import matplotlib.pyplot as plt
import glob

s = pyn.load('./ballsV2.00001')
sl = s.g[np.where((s.g['z'] < 0.005) & (s.g['z']>-0.005))]

sx = s.s['x'][0]
sy = s.s['y'][0]
sz = s.s['z'][0]
r2 = ((s.g['x']-sx)**2+(s.g['y']-sy)**2+(s.g['z']-sz)**2)
Flux = np.array(1./(4*np.pi*r2)*np.exp(-1*7.00114988051*np.sqrt(r2)))

print(type(np.log10(sl['radFlux'])))
print(type(np.log10(Flux)))

plt.figure(figsize = (15,12))
#plt.scatter(sl['x'],sl['y'],c=np.log10(sl['radFlux']),s=75,edgecolors='none', marker = '.',vmin=-6,vmax=1)
plt.scatter(sl['x'],sl['y'],c=np.log10(Flux),s=75,edgecolors='none', marker = '.',vmin=-8,vmax=4)
plt.xlim([-0.5,0.5])
plt.ylim([-0.5,0.5])
plt.xlabel("x")
plt.ylabel("y")
plt.colorbar(label="log(Code Flux)")
plt.savefig('./ballsV2_0.1.pdf')
plt.savefig('./ballsV2_0.1.png')
plt.show()
plt.close()
运行脚本时,出现以下错误:

foo@bar ~/Data/RadTransfer/Scaling_Tests/ballsV2 $ py 
balls.py 
balls.py:15: RuntimeWarning: divide by zero encountered in log10
    print(type(np.log10(sl['radFlux'])))
<class 'numpy.ndarray'>
<class 'numpy.ndarray'>

Traceback (most recent call last):
  File "/home/grondjj/anaconda3/lib/python3.6/site-packages/matplotlib/colors.py", line 141, in to_rgba
    rgba = _colors_full_map.cache[c, alpha]
KeyError: (-4.1574455411341349, None)

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/home/grondjj/anaconda3/lib/python3.6/site-packages/matplotlib/colors.py", line 192, in _to_rgba_no_colorcycle
    c = tuple(map(float, c))
TypeError: 'numpy.float64' object is not iterable

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "balls.py", line 17, in <module>
    plt.scatter(sl['x'],sl['y'],c=np.log10(Flux),s=75,edgecolors='none', marker = '.',vmin=-8,vmax=4)
  File "/home/grondjj/anaconda3/lib/python3.6/site-packages/matplotlib/pyplot.py", line 3435, in scatter
    edgecolors=edgecolors, data=data, **kwargs)
  File "/home/grondjj/anaconda3/lib/python3.6/site-packages/matplotlib/__init__.py", line 1892, in inner
    return func(ax, *args, **kwargs)
  File "/home/grondjj/anaconda3/lib/python3.6/site-packages/matplotlib/axes/_axes.py", line 4028, in scatter
    alpha=alpha
  File "/home/grondjj/anaconda3/lib/python3.6/site-packages/matplotlib/collections.py", line 890, in __init__
    Collection.__init__(self, **kwargs)
  File "/home/grondjj/anaconda3/lib/python3.6/site-packages/matplotlib/collections.py", line 139, in __init__
    self.set_facecolor(facecolors)
  File "/home/grondjj/anaconda3/lib/python3.6/site-packages/matplotlib/collections.py", line 674, in set_facecolor
    self._set_facecolor(c)
  File "/home/grondjj/anaconda3/lib/python3.6/site-packages/matplotlib/collections.py", line 659, in _set_facecolor
    self._facecolors = mcolors.to_rgba_array(c, self._alpha)
  File "/home/grondjj/anaconda3/lib/python3.6/site-packages/matplotlib/colors.py", line 237, in to_rgba_array
    result[i] = to_rgba(cc, alpha)
  File "/home/grondjj/anaconda3/lib/python3.6/site-packages/matplotlib/colors.py", line 143, in to_rgba
    rgba = _to_rgba_no_colorcycle(c, alpha)
  File "/home/grondjj/anaconda3/lib/python3.6/site-packages/matplotlib/colors.py", line 194, in _to_rgba_no_colorcycle
    raise ValueError("Invalid RGBA argument: {!r}".format(orig_c))
ValueError: Invalid RGBA argument: -4.1574455411341349

忽略被零除的内容,问题是散点图函数没有将我的值数组映射到颜色。奇怪的是,上面注释掉的散点图命令运行良好。唯一的区别是我传递的值数组。我一定要把他们演成同一类型的。此外,通量数组中的值本身在~4000和1E-7之间的范围更为合理,只有np.log10sl['radFlux']具有零除误差,并且有效。有什么建议吗?

通量和np.log10sl['radFlux']的长度不同。s的一部分并没有用来计算r2,所以通量最终变得很大。如果matplotlib检查颜色数组与散射x和y数组的长度相同,并显示错误消息,就像x和y数组长度不同时一样,那就太好了。

通量数组的形状和数据类型是什么?什么是np.alltruenp.isfinitenp.log10Flux?我的建议是阅读和理解。有效的是float32,无效的是float64。它们都是一维numpy数组和np.alltruenp.isfinitenp.log10Flux==True。将其强制转换为float32会导致相同的错误TypeError:“numpy.float32”对象不可编辑,现在具有不同的类型。