我正在嘗試根據 CSV 檔案中的 Z 值將我的 3D python 圖變成 3 種不同的顏色。我正在嘗試將一個點著色為一種特定的顏色,然后指向一種顏色以下并指向一種顏色以上。我可以將繪圖變成點上方和下方的顏色,但我似乎無法弄清楚如何將其變成 3 種顏色。
我試圖將 Z 值分成 3 個不同的 3 個子集,但是當我嘗試繪制圖時,它只是空的。我還嘗試通過將 Z 分配給顏色的 if 陳述句來撰寫它,但這也不起作用。這是適用于 2 顏色的代碼:
import matplotlib.pyplot as plt
import numpy as np
from matplotlib import cm
from mpl_toolkits.mplot3d import Axes3D
import pandas as pd
headers = ['name','ra','x rads','x par','dec','y rads','Parallax','Parallax Error','central distance','Z Max','Z Min']
mergeddata = pd.read_csv(r'C:\Users\GregL\Downloads\mergedata - no neg parallax #s (2).csv')
mergeddata.z = mergeddata['central distance']
mergeddata.x = mergeddata['x par']
mergeddata.y = mergeddata['y rads']
x= mergeddata.x
y= mergeddata.y
z = mergeddata.z
colors = [z <= 1956.783590]
fig = plt.figure(figsize=(10,10))
ax = fig.add_subplot(111, projection='3d')
surf=ax.scatter3D(x,y,z,c=colors, cmap='coolwarm',s=.5,marker='^')
ax.set_title('3D Data Distance Plot')
ax.set_zlim(-100,10000)
ax.set_xlim(-50,50)
ax.set_ylim(-50,50)
ax.set_xlabel('RA')
ax.set_ylabel('DEC')
ax.set_zlabel('CENTRAL DISTANCE')
plt.show()
這給了我這個情節

uj5u.com熱心網友回復:
正如 Claudio 在評論中提到的,您可以創建一個顏色值,然后分配一個適當的顏色圖。在這里,我將基于 Matplotlib 的 Tab10 創建一個離散的顏色圖:
import numpy as np
import matplotlib.pyplot as plt
import matplotlib.cm as cm
import matplotlib.colors as col
fig = plt.figure()
ax = plt.axes(projection ='3d')
z = np.linspace(0, 1, 100)
x = z * np.sin(25 * z)
y = z * np.cos(25 * z)
# values for color
c = [int(zv / 0.4) for zv in z]
# discrete colormap with 3 colors
cmap=col.ListedColormap(cm.tab10.colors[:len(np.unique(c))])
ax.scatter(x, y, z, c=c, cmap=cmap)
plt.show()

或者,您可以創建多個ax.scatter命令,每個命令都繪制一個子集。這種方法的優點是您可以為每個子集設定自定義標簽或呈現屬性:
fig = plt.figure()
ax = plt.axes(projection ='3d')
i1 = z < 0.3
i2 = (z >= 0.3) & (z < 0.6)
i3 = z >= 0.6
ax.scatter(x[i1], y[i1], z[i1], label="a")
ax.scatter(x[i2], y[i2], z[i2], label="b")
ax.scatter(x[i3], y[i3], z[i3], label="c")
ax.legend()
plt.show()

轉載請註明出處,本文鏈接:https://www.uj5u.com/net/526630.html
