不使用 "scatter" 函数的 Matplotlib 中的颜色图
Colormap in Matplotlib without using the "scatter" function
我已经构建了一个包含 x 和 y 位置的散点图。现在我有一个带有第三个变量密度的数组,我想根据其密度值为散点图中的每个点分配一种颜色。我知道如何使用 matplotlib 的 "scatter" 任务来完成它,例如:
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)
现在,我想使用 "plot" 函数来做同样的事情,例如:
map = plt.plot(x,y, '.', c=t)
我正在尝试制作星系合并的动画,并根据该区域的密度为每个粒子分配一种颜色。到目前为止,代码仅适用于 "plot" 任务,因此我需要以这种方式实现它,但我发现的所有示例都使用前一种方式。
提前致谢!
首先,@tcaswell 是对的。您可能想要 animate a scatter
plot。为此使用大量 plot
调用会导致比更改 scatter
returns.
的集合更差的性能
但是,您可以通过以下方式使用多个 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()
只是为了比较,这里使用 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 array-like 序列。
我已经构建了一个包含 x 和 y 位置的散点图。现在我有一个带有第三个变量密度的数组,我想根据其密度值为散点图中的每个点分配一种颜色。我知道如何使用 matplotlib 的 "scatter" 任务来完成它,例如:
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)
现在,我想使用 "plot" 函数来做同样的事情,例如:
map = plt.plot(x,y, '.', c=t)
我正在尝试制作星系合并的动画,并根据该区域的密度为每个粒子分配一种颜色。到目前为止,代码仅适用于 "plot" 任务,因此我需要以这种方式实现它,但我发现的所有示例都使用前一种方式。
提前致谢!
首先,@tcaswell 是对的。您可能想要 animate a scatter
plot。为此使用大量 plot
调用会导致比更改 scatter
returns.
但是,您可以通过以下方式使用多个 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()
只是为了比较,这里使用 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 array-like 序列。