如何无需重复编码即可对比同一图表的两个微调版本?
避免重复代码实现同一图表的不同版本对比
问题场景
你希望对比同一图表的两个微调版本(比如不同起始角度的饼图),但不想重复编写几乎完全一致的绘图代码。当前的实现方式存在明显冗余:
values = [1,2,3] labels = ['test1','test2','test3'] plt.figure() plt.pie(values,labels=labels,startangle= 15) plt.figure() plt.pie(values,labels=labels,startangle= 90) plt.show()
可行解决方案
1. 遍历参数循环生成图表
把需要调整的参数(比如startangle)整理成列表,通过循环复用同一套绘图逻辑:
import matplotlib.pyplot as plt values = [1,2,3] labels = ['test1','test2','test3'] # 把需要测试的起始角度放在列表里 start_angles = [15, 90] for angle in start_angles: plt.figure() plt.pie(values, labels=labels, startangle=angle) plt.show()
2. 封装绘图逻辑为函数
将重复的绘图代码封装成函数,后续只需要传入不同参数即可生成对应图表,扩展性更强:
import matplotlib.pyplot as plt def draw_pie(values, labels, start_angle): plt.figure() plt.pie(values, labels=labels, startangle=start_angle) values = [1,2,3] labels = ['test1','test2','test3'] # 调用函数生成不同版本的图表 draw_pie(values, labels, 15) draw_pie(values, labels, 90) plt.show()
3. 绘制在同画布的子图中(更便于对比)
如果想把两个图表放在同一张图里直接对比,用子图布局更直观,同样无需重复编写核心绘图代码:
import matplotlib.pyplot as plt values = [1,2,3] labels = ['test1','test2','test3'] start_angles = [15, 90] # 创建1行2列的子图布局 fig, axes = plt.subplots(1, 2, figsize=(10, 5)) # 遍历子图和参数,批量绘图 for ax, angle in zip(axes, start_angles): ax.pie(values, labels=labels, startangle=angle) ax.set_title(f"起始角度: {angle}") plt.tight_layout() plt.show()
内容的提问来源于stack exchange,提问作者Rodrigo
相关产品推荐
相关产品推荐

