Home > Software engineering >  Question about Code I've found on stackoverflow
Question about Code I've found on stackoverflow

Time:01-06

Line 19: x, y, s, c = next(self.stream).T

Where does T come from ?

I can't comment on the original thread, because I'm, new :( THANKS!

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

What did you try and what were you expecting?

I'm expecting that someone smarter than me can answer my question :-) Thanks!

CodePudding user response:

T is a property on numpy.ndarray that returns the transpose of the array.

CodePudding user response:

In this code, the variable T is not defined. The T in FuncAnimation(self.fig, self.update, interval=5, init_func=self.setup_plot, blit=True) is a parameter that specifies the maximum number of frames to draw. If T is not specified, then the animation will run indefinitely until it is stopped.

In this case, T is not specified, so the animation will run indefinitely until the user closes the window.

  • Related