簡體   English   中英

如何在Python中繪制3D曲面

[英]How to plot 3D surfaces in Python

為了從以下數據生成3D表面,我應該在此處此處的任何示例中進行什么更改/添加?

[100, 0, 'TF', 0]
[100, 0, 'DF', 0]
[100, 50, 'TF', 0]
[100, 50, 'DF', 0]
[100, 100, 'TF', 0]
[100, 100, 'DF', 0]
[100, 150, 'TF', 0.84496124031007758]
[100, 150, 'DF', 0.87209302325581395]
[100, 200, 'TF', 0.88139534883720927]
[100, 200, 'DF', 0.86201550387596892]
[100, 250, 'TF', 0.87441860465116272]
[100, 250, 'DF', 0.889922480620155]
[100, 300, 'TF', 0.87984496124031009]
[100, 300, 'DF', 0.89922480620155043]
[100, 350, 'TF', 0.92015503875968996]
[100, 350, 'DF', 0.90697674418604657]

注意:我確實已經根據上述代碼嘗試了一些方法,但是到目前為止我還沒有設法使它起作用。 我之所以沒有引用我的代碼,是因為我會讓我的問題變得更加復雜。

因此,由於所有x值都相同,因此您的數據並不是真正的3D,但這是我編輯發布的示例的方式。 由於某種原因,X希望成為列表列表。 也許別人知道為什么。 在此處輸入圖片說明

from mpl_toolkits.mplot3d import Axes3D
import matplotlib
import numpy as np
from matplotlib import cm
from matplotlib import pyplot as plt

#step = 0.04
#maxval = 1.0
fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')

# create supporting points in polar coordinates
#r = np.linspace(0,1.25,50)
#p = np.linspace(0,2*np.pi,50)
#R,P = np.meshgrid(r,p)
# transform them to cartesian system
#X,Y = R*np.cos(P),R*np.sin(P)

X=[]
for i in range(0,16):
    X.append([])
    X[i].append(100)
print(X)

Y=[]
for i in range(0,8):
    Y.append(50*i)
    Y.append(50*i)
print(Y)

Z=[]
Z.append(0)
Z.append(0)
Z.append(0)
Z.append(0)
Z.append(0)
Z.append(0)
Z.append(0.84496124031007758)
Z.append(0.87209302325581395)
Z.append(0.88139534883720927)
Z.append(0.86201550387596892)
Z.append(0.87441860465116272)
Z.append(0.889922480620155)
Z.append(0.87984496124031009)
Z.append(0.89922480620155043)
Z.append(0.92015503875968996)
Z.append(0.90697674418604657)
print(Z)


#Z = ((R**2 - 1)**2)
ax.plot_surface(X, Y, Z, rstride=1, cstride=1, cmap=cm.YlGnBu_r)
ax.set_zlim3d(0, 1)
ax.set_xlabel(r'xlabel')
ax.set_ylabel(r'ylabel')
ax.set_zlabel(r'zlabel')
plt.show()

對x數據進行一些更改將使您有所了解:

from mpl_toolkits.mplot3d import Axes3D
import matplotlib
import numpy as np
from matplotlib import cm
from matplotlib import pyplot as plt
fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')

data = [[100, 0, 'TF', 0],
        [100, 0, 'DF', 0],
        [100, 50, 'TF', 0],
        [100, 50, 'DF', 0],
        [100, 100, 'TF', 0],
        [100, 100, 'DF', 0],
        [100, 150, 'TF', 0.84496124031007758],
        [100, 150, 'DF', 0.87209302325581395],
        [100, 200, 'TF', 0.88139534883720927],
        [100, 200, 'DF', 0.86201550387596892],
        [100, 250, 'TF', 0.87441860465116272],
        [100, 250, 'DF', 0.889922480620155],
        [100, 300, 'TF', 0.87984496124031009],
        [100, 300, 'DF', 0.89922480620155043],
        [100, 350, 'TF', 0.92015503875968996],
        [100, 350, 'DF', 0.90697674418604657]
        ]
x = [item[0] for item in data]
# change x here
x = np.linspace(0, 100, num = 16)
y = [item[1] for item in data]
z = [item[3] for item in data]

X, Y = np.meshgrid(x, y)
_z, Z = np.meshgrid(x, z)

ax.plot_surface(X, Y, Z, rstride=1, cstride=1, cmap=cm.YlGnBu_r)
ax.set_zlim3d(0, 1)
ax.set_xlabel(r'xlabel')
ax.set_ylabel(r'ylabel')
ax.set_zlabel(r'zlabel')
plt.show()
plt.close()

在此處輸入圖片說明

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM