我想做一些类似于pyplot.scatter
在 python 中使用 Datashader 模块的事情,为每个点独立指定一个单独的 (x,y)、RGB\hex 值:
#what i'd like to do, but using Datashader:
import numpy as np
#make sample arrays
n = int(1e+8)
point_array = np.random.normal(0, 1, [n, 2])
color_array = np.random.randint(0, 256, [n, 3])/255 # RGB. I can
#convert between it and hex if needed
#the part I need - make an image similar to plt.scatter, using datashader instead:
import matplotlib.pyplot as plt
fig = plt.figure()
plot = fig.add_subplot(111)
fig.canvas.draw()
plot.scatter(point_array[:, 0], point_array[:, 1], c=color_array)
img = np.fromstring(fig.canvas.tostring_rgb(), dtype=np.uint8, sep='')
img = img.reshape(fig.canvas.get_width_height()[::-1] + (3,))
所以这img
是一个 RGB numpy 数组(或 PIL 数组,或任何可以通过 python 保存为图像的东西)
我尝试过的事情
我已经看过datashader.Canvas.points
它以及它如何处理 3 维 pandas 数组,我想我可以将它与color_key
只有红色、只有绿色和只有蓝色的值一起使用,并在标签之间使用“线性插值”,但我没有管理真正让它发挥作用(被熊猫的一面困住了,因为我大多只使用 numpy 来做所有事情)。