python - Matplotlib 中的颜色图,不使用 "scatter"函数

标签 python matplotlib color-mapping

我构建了一个带有 x 和 y 位置的散点图。现在我有一个带有第三个变量密度的数组,我想根据其密度值为散点图中的每个点分配颜色。我知道如何使用 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)

现在,我想使用“plot”函数来做同样的事情,例如:

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

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

提前致谢!

最佳答案

首先,@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 类似数组的序列。

关于python - Matplotlib 中的颜色图,不使用 "scatter"函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27762000/

相关文章:

python - 如何在 matplotlib 中将图形保存为 pdf 作为光栅图像

python - 如何将 NumPy 数组转换为应用 matplotlib 颜色图的 PIL 图像

python - matplotlib 中的事件连接和子图

python - Pandas 数据框 : how to select rows where one column-value is like 'values in a list'

Python Sqlite3 : INSERT INTO table VALUE(dictionary goes here)

python - 为什么在进行多个情节时情节图例会丢失标记?

python - 如何将 `numpy.datetime64` 列表转换为 `matplotlib.dates` ?

Python 3d 散点图颜色图问题

python - 在 R 中使用 system() 调用 python 以运行模拟 python 控制台的 python 脚本

java - TCP 套接字客户端将输出写入本地主机的速度很慢