मेरे पास एक अनुकरण है जो सिमुलेशन के प्रत्येक पुनरावृत्ति के लिए सतह डेटा की गणना करता है। मैं यह देखने के लिए कि यह कैसे विकसित होता है और एल्गोरिदम की जांच करने के लिए एक ही खिड़की (प्रत्येक पुनरावृत्ति में साजिश को अद्यतन करना) के लिए एक सतह साजिश के रूप में उस डेटा को लगातार साजिश करना चाहता हूं।पायथन-matplotlib का उपयोग कर निरंतर 3 डी साजिश (यानी आंकड़ा अद्यतन)?
मेरा विचार एक वर्ग बनाना था जो खिड़की/साजिश को आरंभ करेगा और फिर सिमुलेशन लूप के अंदर से उस खिड़की को फिर से खींचा जाएगा। यहाँ वर्ग मैं के साथ आया है:
import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
from matplotlib import cm
from matplotlib.ticker import LinearLocator, FixedLocator, FormatStrFormatter
import matplotlib
matplotlib.interactive(False)
class plot3dClass(object):
def __init__(self, systemSideLength, lowerCutoffLength):
self.systemSideLength = systemSideLength
self.lowerCutoffLength = lowerCutoffLength
self.fig = plt.figure()
self.ax = self.fig.add_subplot(111, projection='3d')
self.ax.set_zlim3d(-10e-9, 10e9)
X = np.arange(0, self.systemSideLength, self.lowerCutoffLength)
Y = X
self.X, self.Y = np.meshgrid(X, Y)
self.ax.w_zaxis.set_major_locator(LinearLocator(10))
self.ax.w_zaxis.set_major_formatter(FormatStrFormatter('%.03f'))
heightR = np.zeros(self.X.shape)
self.surf = self.ax.plot_surface(self.X, self.Y, heightR, rstride=1, cstride=1, cmap=cm.jet, linewidth=0, antialiased=False)
#~ self.fig.colorbar(self.surf, shrink=0.5, aspect=5)
plt.show()
def drawNow(self, heightR):
self.surf = self.ax.plot_surface(self.X, self.Y, heightR, rstride=1, cstride=1, cmap=cm.jet, linewidth=0, antialiased=False)
plt.draw() # redraw the canvas
time.sleep(1)
समस्या मैं इस कोड के साथ है, कि कोड '() plt.show' पर रुक जाता है और केवल जारी है, जब मैं साजिश विंडो को बंद है। मुझे यह भी यकीन नहीं है कि 'self.ax.plot_surface (...)' और 'plt.draw()' की कॉल आकृति को अपडेट करेगी जैसा मैं चाहूंगा।
तो क्या यह कक्षा सही दिशा है?
यदि हां: क्या संशोधन की आवश्यकता है?
यदि नहीं: क्या कोई मुझे सलाह दे सकता है कि मैं क्या हासिल करना चाहता हूं?
मुझे लगता है कि इस समस्या को दूसरों के लिए तुच्छ लग सकता है लेकिन मैं (ईमानदारी से) पूरे दिन खर्च कल Google पर किया था और कोशिश कर रहा है और मैं एक नुकसान में हूँ ...
किसी भी मदद की बहुत सराहना करेंगे, ताकि मैं अपने वास्तविक काम पर वापस आ सकूं।
पहले से टैंक बहुत पहले।
एक संदर्भ के रूप में:
मैं भी निम्नलिखित कोड है जो करता है, जो मैं चाहता मिला, लेकिन यह 2 डी में है, इसलिए यह मेरे सीधे मदद नहीं करता है:
from pylab import *
import time
ion()
tstart = time.time() # for profiling
x = arange(0,2*pi,0.01) # x-array
line, = plot(x,sin(x))
for i in arange(1,200):
line.set_ydata(sin(x+i/10.0)) # update the data
draw() # redraw the canvas
print 'FPS:' , 200/(time.time()-tstart)
यह मेरे कंप्यूटर (विन XP, पायथन 2.7.3) पर काम नहीं करता है: मैं देखता हूं कि अंतिम ग्राफ –
है plt.draw() लाइन के बाद इसे self.fig.canvas.flush_events() की आवश्यकता है। (क्रेडिट http://stackoverflow.com/a/4098938/415551) –