मान लीजिए कि आपके पास एक बिखराव की साजिश है scat = ax.scatter(...)
, तो आप कर सकते हैं
स्थिति बदलें
scat.set_offsets(array)
जहाँ x और y निर्देशांक array
का एक N x 2
आकार सरणी है।
आकार बदलें
scat.set_sizes(array)
array
बिंदुओं में आकारों का 1D सरणी कहां है।
रंग बदलें
scat.set_array(array)
जहां array
मूल्यों का 1D सरणी है जिसे कॉलोर्म्ड किया जाएगा।
यहां एनीमेशन मॉड्यूल का उपयोग करके एक त्वरित उदाहरण दिया गया है ।
यह होने की तुलना में थोड़ा अधिक जटिल है, लेकिन इससे आपको कट्टर चीजों को करने के लिए एक रूपरेखा मिलनी चाहिए।
(वर्तमान संस्करणों के साथ संगत होने के लिए कोड अप्रैल 2019 को संपादित किया गया है। पुराने कोड के लिए संशोधन इतिहास देखें )
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()
self.fig, self.ax = plt.subplots()
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])
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)
self.scat.set_offsets(data[:, :2])
self.scat.set_sizes(300 * abs(data[:, 2])**1.5 + 100)
self.scat.set_array(data[:, 3])
return self.scat,
if __name__ == '__main__':
a = AnimatedScatter()
plt.show()
आप OSX पर और OSX बैकएंड का उपयोग कर रहे हैं, तो आप को बदलना होगा blit=True
करने blit=False
में 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()