我在python GUI中使用matplotlib绘制动画。下面是代码
import sys
from PyQt4 import QtGui
from matplotlib.backends.backend_qt4agg import FigureCanvasQTAgg as FigureCanvas
from matplotlib.backends.backend_qt4agg import NavigationToolbar2QT as NavigationToolbar
import matplotlib.pyplot as plt
import matplotlib.animation
import numpy as np
class Window(QtGui.QDialog):
def __init__(self, parent=None):
super(Window, self).__init__(parent)
self.figure = plt.figure()
self.canvas = FigureCanvas(self.figure)
self.toolbar = NavigationToolbar(self.canvas, self)
layout = QtGui.QVBoxLayout()
layout.addWidget(self.toolbar)
layout.addWidget(self.canvas)
self.setLayout(layout)
self.ax=self.figure.add_subplot(111)
plt.autoscale(enable=True, axis='both', tight=None #for auto scaling
self.data = [500, -500, 501, -502,.... 623] #some list of data
self.ax = plt.gca()
self.ax.grid()
self.sc = self.ax.scatter(self.data[::2], self.data[1::2]
def plot(self, a):
for i in range(len(self.data)):
self.data[i] = int(self.data[i])+5
self.sc.set_offsets(np.c_[self.data[::2], self.data[1::2]])
self.canvas.draw()
if __name__ == '__main__':
app = QtGui.QApplication(sys.argv)
main = Window()
ani = matplotlib.animation.FuncAnimation(main.figure, main.plot,
frames=4, interval=100, repeat=True)
main.show()
sys.exit(app.exec_())
字符串
我在动画调用的plot函数中使用set_offsets来更新plot。当plot值不断增加并且绘图完成时,plot会超出图形。所以我使用了autoscale()。但它不起作用。轴仍然保持固定,plots会超出视图。
1条答案
按热度按时间3yhwsihp1#
问题是,当轴被自动缩放时,散射偏移没有被考虑在内。这可能是一个错误,或者是一个期望的功能;在任何情况下,两个解决方案是:
使用
plot
一个在许多情况下都可以接受的解决方法是使用线图
plt.plot
而不是plt.scatter
。在这种情况下,可以使用ax.relim
和ax.autoscale_view()
自动缩放轴。字符串
使用
scatter
并以编程方式设置限制如果不能使用上述方法(例如,因为散射点应该具有不同的大小或颜色),则需要根据数据更新限制。
型
x1c 0d1x的数据