等軸測投影”(isometric projection)風格的手繪風格三維圖,即三條坐標軸(x?, x?, x?)看起來彼此垂直、等角分布(通常是 120° 夾角),它是常見于教材和數學書籍的 “假三維”表示法。
展示了一個三軸(X, Y, Z)坐標系,并標記了每個坐標軸上 5 個刻度值:
-
X軸:水平向右(0°)。
-
Y軸:相對于X軸 順時針120°。
-
Z軸:與X軸垂直(90°),豎直向上。
每個軸都標有箭頭、刻度線和對應的數字。現在三個軸的方向和刻度均已正確繪制。
import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif'] = ['SimHei'] # 使用黑體
plt.rcParams['axes.unicode_minus'] = False # 正常顯示負號
import numpy as npfig, ax = plt.subplots(figsize=(6, 6))
ax.set_aspect('equal')origin = np.array([0, 0])
length = 5# 單位向量
ux = np.array([np.cos(np.radians(0)), np.sin(np.radians(0))]) # X軸:0°
uy = np.array([np.cos(np.radians(-120)), np.sin(np.radians(-120))]) # Y軸:順時針120°
uz = np.array([np.cos(np.radians(90)), np.sin(np.radians(90))]) # Z軸:垂直向上# 繪制坐標軸
ax.arrow(*origin, *(ux * length), head_width=0.2, length_includes_head=True, color='black')
ax.arrow(*origin, *(uy * length), head_width=0.2, length_includes_head=True, color='black')
ax.arrow(*origin, *(uz * length), head_width=0.2, length_includes_head=True, color='black')# 標注軸名
ax.text(*(ux * (length + 0.3)), 'X', fontsize=12, ha='center', va='center')
ax.text(*(uy * (length + 0.3)), 'Y', fontsize=12, ha='center', va='center')
ax.text(*(uz * (length + 0.3)), 'Z', fontsize=12, ha='center', va='bottom')# 添加刻度
for i in range(1, length + 1):# X軸tick_x = origin + ux * iax.plot([tick_x[0], tick_x[0]], [tick_x[1] - 0.1, tick_x[1] + 0.1], color='black')ax.text(tick_x[0], tick_x[1] - 0.3, str(i), ha='center', va='top', fontsize=10)# Y軸tick_y = origin + uy * ioffset_y = np.array([-uy[1], uy[0]]) # 垂直方向ax.plot([tick_y[0] - 0.1 * offset_y[0], tick_y[0] + 0.1 * offset_y[0]],[tick_y[1] - 0.1 * offset_y[1], tick_y[1] + 0.1 * offset_y[1]], color='black')ax.text(tick_y[0] + 0.25 * offset_y[0], tick_y[1] + 0.25 * offset_y[1], # 加大偏移避免遮擋str(i), ha='center', va='center', fontsize=10)# Z軸tick_z = origin + uz * iax.plot([tick_z[0] - 0.1, tick_z[0] + 0.1], [tick_z[1], tick_z[1]], color='black')ax.text(tick_z[0] - 0.3, tick_z[1], str(i), ha='right', va='center', fontsize=10)# 范圍與外觀
ax.set_xlim(-6, 6)
ax.set_ylim(-4, 6)
ax.axis('off')plt.title('三維等軸測投影:X(0°), Y(順時針120°), Z(90°)')
plt.show()