如何制作散点图动画

2024-02-09

我正在尝试制作散点图的动画,其中点的颜色和大小在动画的不同阶段发生变化。对于数据,我有两个带有 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)
    

where array is a N x 2x 和 y 坐标的形状数组。

  • 改变尺寸

          scat.set_sizes(array)
    

where array是大小以点为单位的一维数组。

  • 改变颜色

          scat.set_array(array)
    

where array是一个将进行颜色映射的一维值数组。

这是一个使用的快速示例动画模块 https://matplotlib.org/api/animation_api.html.
它比实际需要的稍微复杂一些,但这应该为您提供一个框架来完成更奇特的事情。

(代码于 2019 年 4 月编辑,以与当前版本兼容。有关旧代码,请参阅修订记录 https://stackoverflow.com/questions/9401658/revisions)

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()

如果您使用 OSX 并使用 OSX 后端,则需要更改blit=True to blit=False in the FuncAnimation下面初始化。 OSX 后端不完全支持位块传送。性能会受到影响,但该示例应该在禁用位块传输的 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()
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何制作散点图动画 的相关文章

随机推荐

  • 如何使用 Objective-C 判断 iPhone 是否连接到 wifi 网络?

    在 Objective C iPhone 应用程序的上下文中 我需要能够判断 iPhone 是否已连接到 wifi 网络 并在可能的情况下侦听此状态的变化 有谁知道如何做到这一点 谢谢 加布伊 正如其他人提到的 可达性样本 https de
  • 在 Reactjs 中的 EsLint“react / jsx-props-no-spreading”错误中禁用

    安装 EsLint 后 我 出现的错误之一如下 禁止传播 propeslint react jsx props no spreading 我想在 EsLint 配置中创建一条规则来忽略此错误 但我发现的示例不起作用 这是创建全局异常的格式
  • 正则表达式 Windows 路径验证器

    我试图找到一个针对 Javascript 的 Windows 文件路径验证 但似乎没有一个能够满足我想要的要求 所以我决定自己构建它 要求如下 路径不能为空 可能以 x x 开头 后跟文件名 无文件 需要延期 文件名不能包含以下特殊字符 文
  • PHP:可以包含 file_exists() 说不存在的文件

    在我的脚本中 我设置了包含路径 以便应用程序的另一部分也可以包含文件 检查文件是否存在 然后包含它 但是 在我设置包含路径后 file exists 报告该文件不存在 但我仍然可以包含相同的文件
  • PHP 中静态属性的神奇 __get getter

    public static function get value 不起作用 即使它起作用 碰巧我已经需要神奇的 get getter 作为同一个类中的实例属性 这可能是一个是或否的问题 那么 有可能吗 不 这是不可能的 引用 get 的手册
  • 使用 DataContractJsonSerializer 生成轻量级 JSON

    我正在尝试使用 Net 3 5 中的 C 和 DataContractJsonSerializer 生成 JSON 问题是我不知道如何构建适合我需要的结果的结构 我尝试使用哈希表 列表对象和数组列表来重现 PHP 的关联数组 但无法弄清楚如
  • PHP和MySql中的上传大小问题

    我正在通过 PHP 将文件上传到 MySql DB 我能够上传最大 1MB 的文件 通过反复试验发现 大小超过 1 MB 的文件不会上传 PHP中mysql error 函数打印的MySql错误为 MySQL服务器消失了 有人可以帮我解决这
  • 如何从集合中获取用户自己的数据?

    如何从集合中获取用户自己的数据 登录成功后 auth login除承载令牌外 不返回用户相关信息 So 如何仅请求已登录用户的数据来自一个集合 在使用 GraphQL 时 如果我知道我的用户 ID 我可以通过这种方式过滤我的结果 但我不认为
  • Highcharts 热图带来意想不到的结果

    按照他们网站上的示例 我 大部分 成功地混合了两个示例来显示热图 http www highcharts com demo heatmap http www highcharts com demo heatmap http www high
  • Android Studio 抛出“无方法签名”错误,指向 build.gradle:app

    尝试通过 Android Studio 运行 Kotlin 应用程序后出现此错误 A problem occurred evaluating project app gt No signature of method build 4blex
  • 我可以在 PHP 中混合使用 MySQL API 吗?

    我已经在网上搜索过 到目前为止我所看到的是你可以使用mysql and mysqli 在一起的意思 or
  • 未定义:proto.ProtoPackageIsVersion3

    I get pb go 21 11 undefined proto ProtoPackageIsVersion3我想要版本 2 我安装了protoc from https github com google protobuf release
  • 使用 jQuery 选择带有冒号的 ID

    我正在为一个网站开发一个预先编写的模块 我需要使用 id 来定位一个元素test two 现在 这个元素中有一个冒号 因此 jQuery 可以理解地将 two 视为伪类 有没有办法用 jQuery 来定位这个元素 另外 无法更改 ID 相信
  • 使用 CGBitmapInfo 和 CGI​​mageAlphaInfo 进行按位运算

    我在执行按位运算时遇到问题CGImageAlphaInfo and CGBitmapInfo在斯威夫特 特别是 我不知道如何移植这个 Objective C 代码 bitmapInfo kCGBitmapAlphaInfoMask bitm
  • 在 Eclipse 编辑器中更改 java 关键字的颜色

    如何改变java关键字的颜色 就像 Eclipse java 编辑器中的 package public class 等 我讨厌默认的紫色 谢谢 在 Eclipse 中 窗口 gt 首选项 gt Java gt 编辑器 gt 语法着色 gt
  • 用于多标签分类的 keras 自定义指标

    我在用着sigmoid and binary crossentropy用于多标签分类 例如 标签为y true就好像 1 0 1 0 0 以及标签y pred就好像 0 8 0 3 0 9 0 0 如何设置 Keras 自定义度量函数 以便
  • 从 Date() 获取 Unix 时间戳

    我可以将 unix 时间戳转换为Date 对象通过把long值转化为Date 构造函数 例如 我可以将其作为new Date 1318762128031 但在那之后 我怎样才能从Date object getTime http docs o
  • 与 preg_match_all 和以重复字符结尾的模式重叠匹配

    我想做一些类似于问题的事情preg match all 如何获得 所有 组合 甚至重叠的 https stackoverflow com questions 22454032 preg match all how to get all co
  • 如何将“复合设计模式”与 Ninject 结合使用

    验证规则合约 public interface IValidationRule bool IsValid 具体验证规则 public class MyClass IValidationRule public bool IsValid ret
  • 如何制作散点图动画

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