
代码绘制成果展示










代码解释


第一部分

# =========================================================================================# ====================================== 1. 环境设置 =======================================# =========================================================================================import matplotlib.pyplot as pltimport matplotlib.patches as patchesimport numpy as np

第二部分

# =========================================================================================# ======================================2.颜色库=======================================# =========================================================================================COLOR_SCHEMES = {1: ['#E3D596', '#F2EAD0', '#E0E6D9', '#D1DDD3', '#CBE5D6','#BFE5D8', '#B5E8DE', '#AEE3EB', '#A5D8F0', '#9BCFF0','#92CBE8', '#C1E0E9', '#D2DAEB', '#DCD0EA', '#E7CBE1','#ECC3DA', '#F5BCD1', '#FBB5C9', '#F5ABB8'],60: ['#3e1f00', '#5c2f00', '#7a4000', '#995200', '#b96500','#d97a00', '#fa8f00', '#ffa524', '#ffb947', '#ffcc69','#ffde8a', '#ffefaa', '#ffffca', '#ffffe8', '#ffffff','#ffffe8', '#ffffca', '#ffefaa', '#ffde8a']}SCHEME_ID = 60 #使用的颜色方案current_colors = COLOR_SCHEMES.get(SCHEME_ID, COLOR_SCHEMES[1]) #获取配色方案

第三部分

# =========================================================================================# ======================================4.绘图函数=======================================# =========================================================================================def draw_rose_chart(ax, angles, labels, colors, config):#逐个绘制花瓣for angle, label, color in zip(angles, labels, colors):#调用函数获取当前花瓣的顶点坐标集合、圆心极径和圆半径vertices, center_r, radius = get_teardrop_vertices(angle, #当前花瓣的角度config["inner_gap"], #中心留空的大小config["petal_length"], #花瓣长度config["width_factor"] #花瓣宽度因子)

第四部分

tip_r = center_r + radius #花瓣最外端顶点的极径p1_x = tip_r * np.cos(angle) #第一段引导线起点的横坐标p1_y = tip_r * np.sin(angle) #第一段引导线起点的纵坐标elbow_r = tip_r + config["line_extend"] #引导线转折点的极径p2_x = elbow_r * np.cos(angle) #引导线转折点的横坐标Xp2_y = elbow_r * np.sin(angle) #引导线转折点的纵坐标Y

第五部分

#绘制引导线ax.plot([p1_x, #起点的X坐标p2_x, #转折点的X坐标p3_x], #终点的X坐标[p1_y, #起点的Y坐标p2_y, #转折点的Y坐标p3_y], #终点的Y坐标color=color, #颜色lw=2.0, #线宽zorder=5)#引导线添加文本ax.text(p3_x + text_offset, #xp3_y, #ylabel, #文字内容ha=ha, #水平对齐方式va='center', #垂直对齐方式fontsize=20, #字体大小color='black', #文本颜色fontweight='bold') #粗细

第六部分

# =========================================================================================# ======================================5.执行部分======================================# =========================================================================================if __name__ == "__main__":#定义绘图所需的具体配置参数字典plot_config = {"inner_gap": 0.8, #图表中心的内部空白区域半径"petal_length": 6.5, #每个花瓣的基础长度"width_factor": 0.92, #花瓣的宽度因子"line_extend": 0.8, #引导线第一段向外延伸的长度"text_gap": 1.2, #引导线水平段的长度}

第七部分

#数据raw_data = [("Lisu", 5.0),]#计算数据项的总个数,用于切分圆周角N = len(raw_data)#生成格式化后的标签列表labels = [f"{item[0]} ({item[1]}%)" for item in raw_data]#均分360度并计算出每一个花瓣的中心角度,起始位置在正上方,然后顺时针旋转angles = [np.pi / 2 - i * (2 * np.pi / N) for i in range(N)]

第八部分

# 创建画布fig, ax = plt.subplots(figsize=(12, 12))fig.set_facecolor('#FCFBF4') #画布的背景颜色ax.set_facecolor('#FCFBF4') #坐标轴的背景颜色ax.set_aspect('equal') #设定比例相等ax.axis('off') #隐藏边框和刻度#调用绘图函数draw_rose_chart(ax, angles, labels, current_colors, plot_config)limit = 12 #坐标轴的显示范围界限值ax.set_xlim(-limit, limit) #X轴范围ax.set_ylim(-limit, limit) #Y轴范围plt.tight_layout() #自动调整布局参数

如何应用到你自己的数据

1.设置配色:
SCHEME_ID = 60 #使用的颜色方案2.定义绘图所使用的原始数据:
raw_data = [ ("Lisu", 5.0), ("Han", 7.0), ("Manchu", 5.9), ("Mongolian", 4.4), ("Hui", 4.8), ("Tibetan", 5.3), ("Uighur", 5.9), ("Miao", 5.7), ("Yi", 5.5), ("Zhuang", 5.3), ("Bouyei", 4.9), ("Dong", 4.5), ("Yao", 4.7), ("Bai", 5.2), ("Tujia", 4.9), ("Hani", 5.2), ("Kazakh", 5.0), ("Dai", 6.2), ("Li", 4.7)]3.设置绘图结果的保存地址:
file_png = fr'scheme_{SCHEME_ID}.png'
推荐


获取方式
