تخطيط نقاط بيانات ثلاثية في مؤامرة السطح / الكفاف باستخدام matplotlib

StackOverflow https://stackoverflow.com/questions/3012783

  •  26-09-2019
  •  | 
  •  

سؤال

لدي بعض البيانات السطحية التي يتم إنشاؤها بواسطة برنامج خارجي كقيم XYZ. أرغب في إنشاء الرسوم البيانية التالية ، باستخدام matplotlib:

  • مؤامرة السطح
  • قطعة فنية بالخط الكفافى
  • مؤامرة كفاف متداخلة مع مؤامرة السطح

لقد نظرت إلى عدة أمثلة للتخطيط للأسطح والخطوط في matplotlib - ومع ذلك ، يبدو أن قيم Z هي وظيفة x و y y y ~ f (x ، y).

أفترض أنني سأحتاج بطريقة ما إلى تحويل متغيرات Y ، لكنني لم أر أي مثال حتى الآن ، يوضح كيفية القيام بذلك.

لذا ، سؤالي هو: بالنظر إلى مجموعة من النقاط (x ، y ، z) ، كيف يمكنني إنشاء مؤامرات السطح والمحيقة من تلك البيانات؟

راجع للشغل ، فقط لتوضيح ، لا أريد إنشاء مؤامرات مبعثرة. أيضًا على الرغم من أنني ذكرت Matplotlib في العنوان ، إلا أنني لا أكره استخدام RPY (2) ، إذا كان ذلك سيسمح لي بإنشاء هذه المخططات.

هل كانت مفيدة؟

المحلول

لفعل قطعة فنية بالخط الكفافى أنت بحاجة إلى تداخل بياناتك إلى شبكة عادية http://www.scipy.org/cookbook/matplotlib/gridding_irregularly_spaced_data

مثال سريع:

>>> xi = linspace(min(X), max(X))
>>> yi = linspace(min(Y), max(Y))
>>> zi = griddata(X, Y, Z, xi, yi)
>>> contour(xi, yi, zi)

ل السطحية http://matplotlib.sourceforge.net/examples/mplot3d/surface3d_demo.html

>>> from mpl_toolkits.mplot3d import Axes3D
>>> fig = figure()
>>> ax = Axes3D(fig)
>>> xim, yim = meshgrid(xi, yi)
>>> ax.plot_surface(xim, yim, zi)
>>> show()

>>> help(meshgrid(x, y))
    Return coordinate matrices from two coordinate vectors.
    [...]
    Examples
    --------
    >>> X, Y = np.meshgrid([1,2,3], [4,5,6,7])
    >>> X
    array([[1, 2, 3],
           [1, 2, 3],
           [1, 2, 3],
           [1, 2, 3]])
    >>> Y
    array([[4, 4, 4],
           [5, 5, 5],
           [6, 6, 6],
           [7, 7, 7]])

كفاف في 3D http://matplotlib.sourceforge.net/examples/mplot3d/contour3d_demo.html

>>> fig = figure()
>>> ax = Axes3D(fig)
>>> ax.contour(xi, yi, zi) # ax.contourf for filled contours
>>> show()

نصائح أخرى

مع Pandas و Numpy لاستيراد ومعالجة البيانات ، مع matplot.pylot.contourf لرسم الصورة

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from matplotlib.mlab import griddata

PATH='/YOUR/CSV/FILE'
df=pd.read_csv(PATH)

#Get the original data
x=df['COLUMNNE']
y=df['COLUMNTWO']
z=df['COLUMNTHREE']

#Through the unstructured data get the structured data by interpolation
xi = np.linspace(x.min()-1, x.max()+1, 100)
yi = np.linspace(y.min()-1, y.max()+1, 100)
zi = griddata(x, y, z, xi, yi, interp='linear')

#Plot the contour mapping and edit the parameter setting according to your data (http://matplotlib.org/api/pyplot_api.html?highlight=contourf#matplotlib.pyplot.contourf)
CS = plt.contourf(xi, yi, zi, 5, levels=[0,50,100,1000],colors=['b','y','r'],vmax=abs(zi).max(), vmin=-abs(zi).max())
plt.colorbar()

#Save the mapping and save the image
plt.savefig('/PATH/OF/IMAGE.png')
plt.show()

مثال الصورة

مؤامرة كفاف مع rpy2 + ggplot2:

from rpy2.robjects.lib.ggplot2 import ggplot, aes_string, geom_contour
from rpy2.robjects.vectors import DataFrame

# Assume that data are in a .csv file with three columns X,Y,and Z
# read data from the file
dataf = DataFrame.from_csv('mydata.csv')

p = ggplot(dataf) + \
    geom_contour(aes_string(x = 'X', y = 'Y', z = 'Z'))
p.plot()

مؤامرة السطح مع RPY2 + شعرية:

from rpy2.robjects.packages import importr
from rpy2.robjects.vectors import DataFrame
from rpy2.robjects import Formula

lattice = importr('lattice')
rprint = robjects.globalenv.get("print")

# Assume that data are in a .csv file with three columns X,Y,and Z
# read data from the file
dataf = DataFrame.from_csv('mydata.csv')

p = lattice.wireframe(Formula('Z ~ X * Y'), shade = True, data = dataf)
rprint(p)
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top