如何使用matplotlib/pandas按Activation分组绘制Accuracy对比图
问题分析
你之前两次代码的问题原因如下:
- 第一种groupby后直接调用plot的问题:你取
groupby("Activation")["Accuracy"]得到的是GroupBy Series对象,默认plot会为每个分组绘制折线图,x轴取的是组内的行索引,而非激活函数分类维度,无法体现类别和准确率的对应关系。 - 第二种手动拆分的问题:
plt.plot()默认绘制折线图,仅输入y值时x轴会自动取0、1、2…的序列编号,相当于把同一激活函数的多个准确率按数据行顺序连接,完全达不到分类对比的效果。
正确实现方案
pandas和matplotlib结合使用是最优方案:pandas负责高效的数据分组/预处理,matplotlib负责绘图样式自定义,既不用手动拆分数据,也能灵活调整可视化效果。
下面给两种常用的对比图实现:
方案1:分类散点图(展示所有样本点)
import pandas as pd import matplotlib.pyplot as plt # 读入你的csv数据集 df = pd.read_csv("你的数据集路径.csv") plt.scatter(x=df["Activation"], y=df["Accuracy"], s=60, c="steelblue", alpha=0.8) plt.xlabel("Activation(激活函数)") plt.ylabel("Accuracy(准确率)") plt.title("不同激活函数对应准确率分布") plt.grid(axis="y", linestyle="--", alpha=0.7) plt.show()
如果需要给不同激活函数的点配置不同颜色和图例,用分组遍历实现:
colors = {"tanh": "orange", "relu": "green"} for act_name, group_df in df.groupby("Activation"): plt.scatter( x = [act_name]*len(group_df), y = group_df["Accuracy"], c = colors[act_name], label = act_name, s = 60, alpha = 0.8 ) plt.xlabel("Activation(激活函数)") plt.ylabel("Accuracy(准确率)") plt.title("不同激活函数对应准确率分布") plt.legend() plt.grid(axis="y", linestyle="--", alpha=0.7) plt.show()
方案2:箱线图(展示统计分布,更适合性能对比)
箱线图可以直观展示不同激活函数的准确率最大值、最小值、中位数、四分位区间,更适合对比性能优劣:
df.boxplot(column="Accuracy", by="Activation", grid=False) plt.xlabel("Activation(激活函数)") plt.ylabel("Accuracy(准确率)") plt.title("不同激活函数准确率统计分布") plt.suptitle("") # 去掉pandas自动生成的多余顶部标题 plt.show()
内容的提问来源于stack exchange,提问作者Lleims
相关产品推荐
相关产品推荐

