圖形預覽:
0、import
import numpy as np import matplotlib.pyplot as plt from matplotlib.patches import Arc, Circle, Ellipse, Rectangle, Wedge
1、繪圖
# 創建畫布
fig, ax = plt.subplots(nrows=1, ncols=1, subplot_kw=dict(aspect='equal', facecolor='whitesmoke' ), figsize=(12, 8), facecolor='sienna' ) # --------------------------------- head, body --------------------------------- # head
ax.plot([1, 4], [6.4, 6.4], c='steelblue' ) head = Arc(xy=(2.5, 6.4), # 橢圓中心,(圓弧是橢圓的一部分而已)
width=3, # 長半軸
height=2.5, # 短半軸
theta1=0, # 圓弧起點處角度
theta2=180, # 圓弧終點處角度
fc='w', # 填充色
ec='steelblue' # 邊框顏色
) # body
body = Rectangle(xy=(1, 2.1), # 左下角坐標
width=3, height=4, fc='steelblue' ) # --------------------------------- eyes --------------------------------- # eye_socket
left_eye_socket = Wedge(center=(2, 7), # 鍥形的中心
r=0.4, # 半徑
theta1=0, # 起始角度
theta2=360, # 終止角度
fc='gold' # 填充顏色
) right_eye_socket = Wedge(center=(3, 7), r=0.4, theta1=0, theta2=360, fc='k' ) # eyeball
left_eyeball = Wedge(center=(2, 7), # 中心
r=0.3, # 半徑
theta1=15, # 起始角度
theta2=345, # 終止角度
color='k' ) right_eyeball = Wedge(center=(3, 7), # 中心
r=0.3, # 半徑
theta1=156, # 起始角度
theta2=195, # 終止角度
color='darkred' ) # --------------------------------- base, shadow --------------------------------- # base
ax.plot([1.1, 4], [1, 1.3], color='k') base = Arc(xy=(2.5, 1.1), # 橢圓中心,(圓弧是橢圓的一部分而已)
width=3, # 長半軸
height=1, # 短半軸
angle=10, # 橢圓旋轉角度(逆時針)
theta1=0, # 圓弧的起點處角度
theta2=175, # 圓度的終點處角度
color='k', alpha=0.8 ) # shadow
shadow = Ellipse(xy=(2.5, 0.5), # 橢圓中心
width=4.2, # 長半軸
height=0.5, # 短半軸
fc='silver', # facecolor
alpha=0.2 ) # --------------------------------- wheels ---------------------------------
left_wheel = Ellipse(xy=(1, 1), # 中心
width=0.7, # 長半軸
height=0.4, # 短半軸
angle=95, # 逆時針旋轉角度
color='k' ) right_wheel = Ellipse(xy=(4, 1.3), # 中心
width=0.7, # 長半軸
height=0.4, # 短半軸
angle=85, # 逆時針旋轉角度
color='k' ) # --------------------------------- arms ---------------------------------
left_upper_arm = ax.plot([0.3, 0.875], [4.55, 5.75], color='silver', # facecolor
lw=4, # line width
) left_lower_arm = ax.plot([0, 0.3], [4.2, 4.55], color='silver', # facecolor
lw=4, # line width
) right_upper_arm = ax.plot([4.125, 4.3], [5.75, 6.95], color='silver', # facecolor
lw=4, # line width
) right_lower_arm = ax.plot([4.3, 4.3], [6.95, 7.25], color='silver', # facecolor
lw=4, # line width
) # --------------------------------- hands ---------------------------------
left_hand = Wedge(center=(0, 4), r=0.2, theta1=290, theta2=250, fc='k' ) right_hand = Wedge(center=(4.3, 7.45), r=0.2, theta1=110, theta2=70, fc='k' ) # --------------------------------- shoulders ---------------------------------
left_shoulder = Ellipse(xy=(1, 5.75), # 中心
width=0.5, # 長半軸
height=0.25, # 短半軸
angle=90, # 逆時針旋轉角度
fc='k', # facecolor
) right_shoulder = Ellipse(xy=(4, 5.75), # 中心
width=0.5, # 長半軸
height=0.25, # 短半軸
angle=90, # 逆時針旋轉角度
fc='k', # facecolor
) # --------------------------------- elbows ---------------------------------
left_elbow = Wedge(center=(0.3, 4.55), r=0.1, theta1=0, theta2=360, fc='k' ) right_elbow = Wedge(center=(4.3, 6.95), r=0.1, theta1=0, theta2=360, fc='k' ) # --------------------------------- joints ---------------------------------
top_joint1 = Ellipse(xy=(2.5, 6.2), width=0.5, height=0.2, fc='silver', ec='w' ) top_joint2 = Ellipse(xy=(2.5, 6.3), width=0.5, height=0.2, fc='silver', ec='w' ) bottom_joint1 = Ellipse(xy=(2.5, 2), # 中心
width=1, # 長半軸
height=0.3, # 短半軸
fc='silver', # facecolor
ec='w' ) bottom_joint2 = Ellipse(xy=(2.5, 1.7), # 中心
width=1, # 長半軸
height=0.3, # 短半軸
fc='silver', # facecolor
ec='w' ) # --------------------------------- 向繪圖區添加幾何形狀 ---------------------------------
polygons = [body, head, left_eye_socket, right_eye_socket, left_eyeball, right_eyeball, shadow, base, left_wheel, right_wheel, left_hand, right_hand, left_shoulder, right_shoulder, left_elbow, right_elbow, top_joint1, top_joint2, bottom_joint1, bottom_joint2 ] for pln in polygons: ax.add_patch(pln) # 設置刻度范圍
ax.axis([-1, 6, 0, 10]) # [xmin, xmax, ymin, ymax]
# 隱藏軸脊
for position in ['left', 'top', 'right', 'bottom']: ax.spines[position].set_visible(False) # 隱藏刻度
ax.set(xticks=(), yticks=() ) # 顯示圖形
plt.show()
圖形:
軟件信息: