使用matplotlib绘制范围波动曲线图
Posted 华师数据学院·王嘉宁
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用matplotlib绘制范围波动曲线图相关的知识,希望对你有一定的参考价值。
使用matplotlib绘制范围波动曲线
论文在做数据分析时,经常需要绘制曲线图,例如对不同的超参数对应的实验性能变化。由于实际实验需要重复执行多次并获取均值和波动范围,需要同时在曲线图中展示。本文介绍并提供使用基于matplotlib绘制简单精美的曲线图。
展示预期效果,例如给出两个方法在不同训练样本数量条件下的准确率变化情况:
图像特点:
- 可对比多个不同的方法,不同方法的使用不同颜色、类型的曲线进行绘制;
- 可展示每个方法对应的极差波动范围,以展示不同方法的稳定程度;
- 横坐标部分为2倍指数递增;
对应代码:
import numpy as np
import sys
import sklearn
from sklearn import metrics
import matplotlib
matplotlib.use('agg')
from matplotlib import pyplot as plt
plt.figure(figsize=(6, 5)) # 设置整个图像的尺寸(长高分别为6、5个单位)
plt.title("Dataset", size = 24) # 设置标题以及大小
models = ['Baseline', 'Our Proposal'] # 定义好所有模型名称
cnt = 0
maker = ['^','s'] # 曲线标记
x = [16, 32, 64, 128, 256, 512] # 作为横轴
x_names = ['16', '32', '64', '128', '256', '512'] # 横轴展示的值
results = # 用于展示每个方法的曲线
'Baseline': [81.42, 88.19, 90.94, 92.55, 93.58, 94.27],
'Our Proposal': [93.46, 92.55, 92.67, 94.50, 95.07, 95.18]
ranges_top = # 用于展示每个方法的上界
'Baseline': [85.32, 89.65, 91.66, 92.89, 93.92, 94.61],
'Our Proposal': [93.98, 93.46, 93.00, 94.84, 95.30, 95.30]
ranges_bottom = # 用于展示每个方法的下界
'Baseline': [76.26, 86.50, 90.13, 92.20, 93.35, 94.04],
'Our Proposal': [92.89, 91.98, 92.32, 94.21, 94.95, 95.07]
for model_name in models:
y = np.array(results[model_name]).astype(np.float) # 每个方法的值
y1 = np.array(ranges_top[model_name]).astype(np.float) # 每个方法的上界
y2 = np.array(ranges_bottom[model_name]).astype(np.float) # 每个方法的下界
makevery =1
plt.xscale("log", base=2) # 设置横轴为2倍指数递增
plt.plot(x, y, label=model_name, linewidth=2, marker=maker[cnt], markevery=makevery, markersize=6) # 绘制当前模型的曲线
# 填充上下界区域内,设置边界、填充部分颜色,以及透明度
plt.fill_between(x, y1, y2, #上限,下限
# facecolor='green', #填充颜色
# edgecolor='red', #边界颜色
alpha=0.3
) #透明度
plt.xlabel("#Training (K)",fontsize=18)
plt.ylabel("Accuracy (%)",fontsize=18)
plt.ylim([70.0, 100.0]) # 设置纵轴大小范围
plt.xticks(x, x_names, rotation=0, size = 20) # 设置横轴坐标轴刻度,文字大小为20
plt.yticks(np.arange(70, 100, 5), rotation=0, size = 20) # 设置纵轴坐标轴刻度(70-100,每隔5个单位绘制刻度),文字大小为20
cnt+=1
font1 =
'weight' : 'normal',
'size' : 22,
plt.legend(loc = "lower right", prop=font1) # 设置信息框
plt.grid(False) # 不显示网格线
ax=plt.gca() #gca:get current axis得到当前轴
# 设置图像的边框颜色
ax.spines['right'].set_color('#ccc')
ax.spines['top'].set_color('#ccc')
ax.spines['left'].set_color('#ccc')
ax.spines['bottom'].set_color('#ccc')
# 设置图像的边框粗细程度
ax.spines['right'].set_linewidth('2.0')
ax.spines['top'].set_linewidth('2.0')
ax.spines['left'].set_linewidth('2.0')
ax.spines['bottom'].set_linewidth('2.0')
# 保存图像
plt.savefig("./"+'show.png', dpi=120, bbox_inches='tight')
以上是关于使用matplotlib绘制范围波动曲线图的主要内容,如果未能解决你的问题,请参考以下文章