दिलचस्प पोस्ट
"रडार चार्ट" (उर्फ स्टार प्लॉट, मकड़ी का साजिश) आर जी में जीजीप्लोट 2 का उपयोग करना क्रोम में इनपुट प्रकार = "संख्या" के लिए अधिकतमलेम्बला को नजरअंदाज किया गया आईपी ​​कैमरा से एमजेपीईपी स्ट्रीम को कैसे पार्स करना है? Serializable क्या मतलब है? रुबी में बाहरी प्रक्रिया के एसटीडीओओटी से लगातार पढ़ते हैं JQuery का उपयोग करके क्लिपबोर्ड पर क्लिप कॉपी करें क्लिक करें मैं कैसे तय कर सकता हूं कि एक विशिष्ट फाइल विंडोज में खुली है या नहीं? "एक्स-यूए-संगत" सामग्री = "आईई = 9; IE = 8; IE = 7; IE = किनारा " जावा में हाइबरनेट का उपयोग करके डेटाबेस से कंबलबॉक्स को भरना अंतिम कीवर्ड कैसे काम करता है JSON.NET लाइब्रेरी के बिना JSON को पार्स करने के लिए कैसे? पायथन में कई तिथियां बनाना सरल पीएचपी पटकथा स्क्रिप्ट मैं एंड्रॉइड में विशिष्ट श्रेणी में यादृच्छिक संख्या कैसे प्राप्त कर सकता हूं? JavaFX दृश्य निर्माता कहाँ गया है?

मटप्ललिब में सतह के भूखंड

मेरे पास 3-ट्यूपल्स की एक सूची है जो 3 डी स्पेस में अंकों के एक सेट का प्रतिनिधित्व करती है। मैं एक ऐसी सतह की साजिश करना चाहता हूं जो इन सभी बिंदुओं को कवर करती है। Mplot3d पैकेज में plot_surface फ़ंक्शन के लिए तर्क एक्स, वाई और जेड की आवश्यकता होती है, जो कि 2d एरे हैं। साजिश साजिश का सही कार्य है और मैं अपने डेटा को आवश्यक प्रारूप में कैसे रूपांतरित कर सकता हूं?

data = [(x1,y1,z1),(x2,y2,z2),.....,(xn,yn,zn)]

वेब के समाधान से एकत्रित समाधान "मटप्ललिब में सतह के भूखंड"

सतहों के लिए यह 3-ट्यूप्ले की सूची से थोड़ा अलग है, आपको 2 डी सरणियों में डोमेन के लिए एक ग्रिड में पास होना चाहिए।

यदि आपके पास कुछ कार्य f(x, y) -> z बजाए 3 डी पॉइंट्स की सूची है, तो आपको एक समस्या होगी क्योंकि एक पृष्ठ में 3 डी पॉइंट क्लाउड को त्रिकोण बनाने के कई तरीके हैं।

यहां एक चिकनी सतह का उदाहरण दिया गया है:

 import numpy as np from mpl_toolkits.mplot3d import Axes3D import matplotlib.pyplot as plt import random def fun(x, y): return x**2 + y fig = plt.figure() ax = fig.add_subplot(111, projection='3d') x = y = np.arange(-3.0, 3.0, 0.05) X, Y = np.meshgrid(x, y) zs = np.array([fun(x,y) for x,y in zip(np.ravel(X), np.ravel(Y))]) Z = zs.reshape(X.shape) ax.plot_surface(X, Y, Z) ax.set_xlabel('X Label') ax.set_ylabel('Y Label') ax.set_zlabel('Z Label') plt.show() 

यहां छवि विवरण दर्ज करें

मैं सिर्फ इस एक ही समस्या में आया था। मुझे समान रूप से डेटा है जो 2-डी सरणियों के बजाय 3 1-डी सरणियों में है जो कि plot_surface चाहता है मेरा डेटा एक pandas.DataFrame में हुआ। pandas.DataFrame इसलिए यहां pandas.DataFrame उदाहरण के साथ 3 1-डी सरणियों को साजिश करने के संशोधनों के साथ।

 from mpl_toolkits.mplot3d import Axes3D from matplotlib import cm from matplotlib.ticker import LinearLocator, FormatStrFormatter import matplotlib.pyplot as plt import numpy as np X = np.arange(-5, 5, 0.25) Y = np.arange(-5, 5, 0.25) X, Y = np.meshgrid(X, Y) R = np.sqrt(X**2 + Y**2) Z = np.sin(R) fig = plt.figure() ax = fig.gca(projection='3d') surf = ax.plot_surface(X, Y, Z, rstride=1, cstride=1, cmap=cm.coolwarm, linewidth=0, antialiased=False) ax.set_zlim(-1.01, 1.01) ax.zaxis.set_major_locator(LinearLocator(10)) ax.zaxis.set_major_formatter(FormatStrFormatter('%.02f')) fig.colorbar(surf, shrink=0.5, aspect=5) plt.title('Original Code') 

यही मूल उदाहरण है इस अगले बिट को जोड़ने से एक ही भूखंड को 3 1-डी सरणियों से बनाया गया है।

 # ~~~~ MODIFICATION TO EXAMPLE BEGINS HERE ~~~~ # import pandas as pd from scipy.interpolate import griddata # create 1D-arrays from the 2D-arrays x = X.reshape(1600) y = Y.reshape(1600) z = Z.reshape(1600) xyz = {'x': x, 'y': y, 'z': z} # put the data into a pandas DataFrame (this is what my data looks like) df = pd.DataFrame(xyz, index=range(len(xyz['x']))) # re-create the 2D-arrays x1 = np.linspace(df['x'].min(), df['x'].max(), len(df['x'].unique())) y1 = np.linspace(df['y'].min(), df['y'].max(), len(df['y'].unique())) x2, y2 = np.meshgrid(x1, y1) z2 = griddata((df['x'], df['y']), df['z'], (x2, y2), method='cubic') fig = plt.figure() ax = fig.gca(projection='3d') surf = ax.plot_surface(x2, y2, z2, rstride=1, cstride=1, cmap=cm.coolwarm, linewidth=0, antialiased=False) ax.set_zlim(-1.01, 1.01) ax.zaxis.set_major_locator(LinearLocator(10)) ax.zaxis.set_major_formatter(FormatStrFormatter('%.02f')) fig.colorbar(surf, shrink=0.5, aspect=5) plt.title('Meshgrid Created from 3 1D Arrays') # ~~~~ MODIFICATION TO EXAMPLE ENDS HERE ~~~~ # plt.show() 

यहां परिणामस्वरूप आंकड़े दिए गए हैं:

यहां छवि विवरण दर्ज करेंयहां छवि विवरण दर्ज करें

आधिकारिक उदाहरण की जांच करें एक्स, वाई और जेड वास्तव में 2 डी सरणियां हैं, numpy.meshgrid () 1d x और y मानों से 2d x, y मेष प्राप्त करने का एक आसान तरीका है।

http://matplotlib.sourceforge.net/mpl_examples/mplot3d/surface3d_demo.py

आपके 3-ट्यूप्ले को 3 1 डी सरणियों में परिवर्तित करने के लिए यहां अजगर का तरीका है।

 data = [(1,2,3), (10,20,30), (11, 22, 33), (110, 220, 330)] X,Y,Z = zip(*data) In [7]: X Out[7]: (1, 10, 11, 110) In [8]: Y Out[8]: (2, 20, 22, 220) In [9]: Z Out[9]: (3, 30, 33, 330) 

यहां एमटीएप्लॉटलिब डेलैनेए त्रिकोणीय (प्रक्षेप) है, यह 1d x, y, z को कुछ अनुरूप (?) में बदलता है:

http://matplotlib.sourceforge.net/api/mlab_api.html#matplotlib.mlab.griddata

मैं पंडों का इस्तेमाल करते हुए अजगर में कुछ पंक्तियों के साथ ऐसा करता हूं, साजिश सुंदर है!

 from mpl_toolkits.mplot3d import Axes3D import matplotlib.pyplot as plt from matplotlib import cm import numpy as np import pandas as pd from sys import argv file = argv[1] x,y,z = np.loadtxt(file, unpack=True) df = pd.DataFrame({'x': x, 'y': y, 'z': z}) fig = plt.figure() ax = Axes3D(fig) surf = ax.plot_trisurf(df.x, df.y, df.z, cmap=cm.jet, linewidth=0.1) fig.colorbar(surf, shrink=0.5, aspect=5) plt.savefig('teste.pdf') plt.show() 

यदि आवश्यक हो तो आप कलरबार रेंज को परिभाषित करने के लिए vmin और vmax पास कर सकते हैं, उदा

 surf = ax.plot_trisurf(df.x, df.y, df.z, cmap=cm.jet, linewidth=0.1, vmin=0, vmax=2000) 

सतह

delaunay में delaunay x , y delaunay (केवल z ) पर delaunay समारोह का उपयोग करते हुए कुछ ऐसा ही किया था, फिर trimesh या trisurf साथ trimesh trisurf , z को ऊंचाई के रूप में इस्तेमाल करना

SciPy में Delaunay वर्ग है, जो एक ही अंतर्निहित QHull पुस्तकालय पर आधारित है जो Matlab के delaunay फ़ंक्शन है, इसलिए आपको समान परिणाम मिलना चाहिए।

वहां से, यह आपको कुछ हासिल करने की इच्छा रखने वाले पायथन- मैप्लेटलिब उदाहरण में इस प्लॉटिंग 3D बहुभुज को परिवर्तित करने के लिए कोड की कुछ पंक्तियां होनी चाहिए, क्योंकि Delaunay आपको प्रत्येक त्रिकोणीय बहुभुज का विनिर्देश प्रदान करता है।