gpt4 book ai didi

python - 如何动画散点图

转载 作者:IT老高 更新时间:2023-10-28 20:34:01 24 4
gpt4 key购买 nike

我正在尝试制作散点图的动画,其中点的颜色和大小在动画的不同阶段发生变化。对于数据,我有两个带有 x 值和 y 值的 numpy ndarray:

data.shape = (ntime, npoint)
x.shape = (npoint)
y.shape = (npoint)

现在我想绘制类型的散点图

pylab.scatter(x,y,c=data[i,:])

并在索引 i 上创建动画。我该怎么做?

最佳答案

假设你有一个散点图,scat = ax.scatter(...),那么你可以

  • 改变位置

          scat.set_offsets(array)

其中 array 是一个 N x 2 形状的 x 和 y 坐标数组。

  • 更改尺寸

          scat.set_sizes(array)

其中 array 是以点为单位的一维数组。

  • 改变颜色

          scat.set_array(array)

其中 array 是一维值数组,将进行颜色映射。

这是一个使用 animation module 的简单示例.
它比它必须的稍微复杂一些,但这应该会给你一个框架来做更有趣的事情。

(代码于 2019 年 4 月编辑以与当前版本兼容。旧代码参见 revision history)

import matplotlib.pyplot as plt
import matplotlib.animation as animation
import numpy as np

class AnimatedScatter(object):
"""An animated scatter plot using matplotlib.animations.FuncAnimation."""
def __init__(self, numpoints=50):
self.numpoints = numpoints
self.stream = self.data_stream()

# Setup the figure and axes...
self.fig, self.ax = plt.subplots()
# Then setup FuncAnimation.
self.ani = animation.FuncAnimation(self.fig, self.update, interval=5,
init_func=self.setup_plot, blit=True)

def setup_plot(self):
"""Initial drawing of the scatter plot."""
x, y, s, c = next(self.stream).T
self.scat = self.ax.scatter(x, y, c=c, s=s, vmin=0, vmax=1,
cmap="jet", edgecolor="k")
self.ax.axis([-10, 10, -10, 10])
# For FuncAnimation's sake, we need to return the artist we'll be using
# Note that it expects a sequence of artists, thus the trailing comma.
return self.scat,

def data_stream(self):
"""Generate a random walk (brownian motion). Data is scaled to produce
a soft "flickering" effect."""
xy = (np.random.random((self.numpoints, 2))-0.5)*10
s, c = np.random.random((self.numpoints, 2)).T
while True:
xy += 0.03 * (np.random.random((self.numpoints, 2)) - 0.5)
s += 0.05 * (np.random.random(self.numpoints) - 0.5)
c += 0.02 * (np.random.random(self.numpoints) - 0.5)
yield np.c_[xy[:,0], xy[:,1], s, c]

def update(self, i):
"""Update the scatter plot."""
data = next(self.stream)

# Set x and y data...
self.scat.set_offsets(data[:, :2])
# Set sizes...
self.scat.set_sizes(300 * abs(data[:, 2])**1.5 + 100)
# Set colors..
self.scat.set_array(data[:, 3])

# We need to return the updated artist for FuncAnimation to draw..
# Note that it expects a sequence of artists, thus the trailing comma.
return self.scat,


if __name__ == '__main__':
a = AnimatedScatter()
plt.show()

enter image description here

如果您在 OSX 上并使用 OSX 后端,则需要在 FuncAnimation blit=True 更改为 blit=False下面的初始化。 OSX 后端不完全支持 blitting。性能会受到影响,但该示例应该在禁用 blitting 的 OSX 上正确运行。


对于仅更新颜色的更简单示例,请查看以下内容:

import matplotlib.pyplot as plt
import numpy as np
import matplotlib.animation as animation

def main():
numframes = 100
numpoints = 10
color_data = np.random.random((numframes, numpoints))
x, y, c = np.random.random((3, numpoints))

fig = plt.figure()
scat = plt.scatter(x, y, c=c, s=100)

ani = animation.FuncAnimation(fig, update_plot, frames=range(numframes),
fargs=(color_data, scat))
plt.show()

def update_plot(i, data, scat):
scat.set_array(data[i])
return scat,

main()

关于python - 如何动画散点图,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9401658/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com