我对python很陌生。在过去的两天里,我一直在尝试找出如何使用matplotlib缩放3d图(天线辐射图)的颜色。看起来缩放比例在xyz轴之一上起作用,但是当缩放比例从原点(半径)开始时无效。任何帮助都非常感谢。
这不是我的代码,但是我发现它非常有用。
这是代码: -从Excel文档中读取值 -如您所见,我正在尝试使用此命令“ colors = plt.cm.jet((R)/(Rmax))”,但无法正常工作。
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import mpl_toolkits.mplot3d.axes3d as axes3d
# Read data file and plot
df = pd.read_csv('EIRP_Data.csv') #henter data fra Excel
theta1d = df['Theta']
theta1d = np.array(theta1d);
theta2d = theta1d.reshape([37,73]) #"Theta" kolonen blir hentet ut, satt i numpy array og gjort om til 2d array
phi1d = df['Phi']
phi1d = np.array(phi1d);
phi2d = phi1d.reshape([37,73]) #"Phi" kolonen blir hentet ut, satt i numpy array og gjort om til 2d Array
power1d = df['Power']
power1d = np.array(power1d);
power2d = power1d.reshape([37,73]) #"Power" kolonen blir hentet ut, satt i numpy array og gjort om til 2d array
THETA = np.deg2rad(theta2d)
PHI = np.deg2rad(phi2d)
R = power2d
Rmax = np.max(R)
Rmin = np.min(R)
N = R / Rmax
#Gjør om polar til kartesisk
X = R * np.sin(THETA) * np.cos(PHI)
Y = R * np.sin(THETA) * np.sin(PHI)
Z = R * np.cos(THETA)
fig = plt.figure()
#plot spesifikasjoner/settings
ax = fig.add_subplot(1,1,1, projection='3d')
ax.grid(True)
ax.axis('on')
ax.set_xlabel('X')
ax.set_ylabel('Y')
ax.set_zlabel('Z')
ax.set_xticklabels([])
ax.set_yticklabels([])
ax.set_zticklabels([])
#colors =plt.cm.jet( (X.max()-X)/float((X-X.min()).max()))
colors =plt.cm.jet( (R)/(Rmax) )
ax.plot_surface(
X, Y, Z, rstride=1, cstride=1, facecolors=colors,
linewidth=0, antialiased=True, alpha=0.5, zorder = 0.5)
ax.view_init(azim=300, elev = 30)
# Add Spherical Grid
phi ,theta = np.linspace(0, 2 * np.pi, 40), np.linspace(0, np.pi, 40)
PHI, THETA = np.meshgrid(phi,theta)
R = Rmax
X = R * np.sin(THETA) * np.cos(PHI)
Y = R * np.sin(THETA) * np.sin(PHI)
Z = R * np.cos(THETA)
ax.plot_wireframe(X, Y, Z, linewidth=0.5, rstride=20, cstride=20)
plt.show()
答案 0 :(得分:0)
我有以下代码来考虑色标的半径。达到目的的是使用颜色图来获取归一化R的颜色值(此处为颜色权重)。
X = np.ones((phiSize, thetaSize)) # Prepare arrays to hold the cartesian coordinate data.
Y = np.ones((phiSize, thetaSize))
Z = np.ones((phiSize, thetaSize))
color_weight = np.ones((phiSize, thetaSize))
min_dBi = np.abs(df["dBi"].min())
for phi_idx, phi in enumerate(np.unique(df["Phi"])):
for theta_idx, theta in enumerate(np.unique(df["Theta"])):
e = df.query(f"Phi=={phi} and Theta=={theta}").iloc[0]["dBi"]
e = min_dBi + e # so we dont have any negative numbers
xe, ye, ze = sph2cart1(e, math.radians(theta), math.radians(phi)) # Calculate cartesian coordinates
X[phi_idx, theta_idx] = xe # Store cartesian coordinates
Y[phi_idx, theta_idx] = ye
Z[phi_idx, theta_idx] = ze
color_weight[phi_idx, theta_idx] = e
ax.plot_surface(X, Y, Z, color='b') # Plot surface
plt.ylabel('Y')
plt.xlabel('X') # Plot formatting
plt.show()
使用phisize
和thetaSize
来计算数据中唯一phi和theta的数量。
我天线的dBi存储在dBi列中的熊猫中。