Matplotlib中的Colormap不使用“scatter”函数

时间:2015-01-04 03:15:26

标签: python matplotlib color-mapping

我构建了一个带有x和y位置的散点图。现在我有一个带有第三个变量密度的数组,我想根据其密度值为散点图中的每个点指定一个颜色。我知道如何使用" scatter" matplotlib的任务,例如:

x = [1,2,3,4]
y = [5,3,7,1]
density = [1,2,3,4]

map = plt.scatter(x, y, c=density)
colorbar = plt.colorbar(map)

现在,我想使用"情节"功能相反,如:

map = plt.plot(x,y, '.', c=t)

我正在尝试制作星系合并的动画,并根据该区域的密度为每个粒子分配颜色。到目前为止,代码仅适用于" plot"任务,所以我需要以这种方式实现它,但我发现的所有例子都使用前一种方式。

提前致谢!

1 个答案:

答案 0 :(得分:2)

首先,@ tcaswell是对的。你可能想要animate a scatter plot。使用大量plot次调用会导致比更改scatter返回的集合更糟糕的性能。

但是,您可以使用多个plot来执行此操作:

import numpy as np
import matplotlib.pyplot as plt

xdata, ydata, zdata = np.random.random((3, 10))

cmap = plt.cm.gist_earth
norm = plt.Normalize(zdata.min(), zdata.max())

fig, ax = plt.subplots()
for x, y, z in zip(xdata, ydata, zdata):
    ax.plot([x], [y], marker='o', ms=20, color=cmap(norm(z)))

sm = plt.cm.ScalarMappable(norm, cmap)
sm.set_array(zdata)
fig.colorbar(sm)

plt.show()

enter image description here

仅用于比较,这里使用scatter完全相同:

import numpy as np
import matplotlib.pyplot as plt

xdata, ydata, zdata = np.random.random((3, 10))


fig, ax = plt.subplots()
scat = ax.scatter(xdata, ydata, c=zdata, s=200, marker='o')
fig.colorbar(scat)

plt.show()

如果您想更改散点图中标记的位置,请使用scat.set_offsets(xydata),其中xydata是Nx2数组序列。