如何使用matplotlib为pandas数据的散点图设置动画

时间:2017-05-12 16:21:54

标签: python pandas animation matplotlib

我目前正在尝试为保存在pandas数据框中的月度数据的散点图设置动画。到目前为止,我做了循环,生成一个接一个的单个图。现在我想加入他们一个单一的GIF(或mp4我不在乎)。有没有一种简单的方法来使用mathplotlibs动画功能?我无法理解,如何通过FuncAnimation循环切片数据。到目前为止,我做到了这一点:

time = df.monat.unique()
for i in time:
    dft = df[(df.monat == i) & (df.xcol < 4000)]
    plt.scatter(x=dft['xcol'],
            y=dft['ycol'],
            s=dft['scol'] / 25,
            c=dft['clr'],
            linewidth=0,
            alpha=0.8)
    plt.title('Title ' + str(i), fontsize=10)
    plt.xlabel('x label', fontsize=9)
    plt.ylabel('y label', fontsize=9)
    legend1_line2d = list()
    for val in clrdict.values():
        legend1_line2d.append(mlines.Line2D([0], [0],
            linestyle='none',
            marker='o',
            alpha=0.6,
            markersize=6,
            markeredgecolor=None,
            markeredgewidth=0,
            markerfacecolor=val))
    legend1 = plt.legend(legend1_line2d,
             names,
             frameon=False,
             numpoints=1,
             fontsize=8,
             loc='upper right') 
    plt.show()

1 个答案:

答案 0 :(得分:2)

我自己想出来了:

生成一个空图(图)。就像之前所有唯一的时间值都存储在一系列(时间)中一样。一个简单的计数器(i)有助于在更新函数内为每个月生成正确的数据切片(dft)(df.monat ==系列中的值&#39; time&#39;)。 update-function的调用次数是anim.FuncAnimation中frame-parameter的值(frames = len(time))。

希望,这对其他人有帮助(matplotlib FuncAnimation的大多数解释我发现使用随机数 - 而不是特定的pandas列):

 var app = angular.module("app", []);

        app.controller("ctrl",
            function ($scope) {

                var options = [
                    { name: "a" },
                    { name: "b" },
                    { name: "c" }
                ];

                $scope.names = [
                    { id: 1, field: "insert name", name: "name", placeholder: "your name is", value:null, type:"text" },
                    { id: 2, field: "insert phone", name: "phone", placeholder: "your phone is", value: null, type: "tel" },
                    { id: 3, field: "insert age", name: "age", placeholder: "your age is", value: null, type: "number", min: 0, max: 20 },
                    { id: 4, field: "select country", name: "country", placeholder: "your country is", value: null, type: "select", options: options }
                ];

                $scope.sendMe = function() {
                    console.log($scope.names);
                }
            });