前几天与同学闲聊,聊到画图这个问题,小霞说图表是一篇文章或者论文的精髓所在,图就像衣服,当评审员拿到一篇文章的时候,首先会浏览一下这篇文章的图,然后确定是否值得继续看下去。由此,我开始研究怎样可以画出好看的图,言归正传,我开始为你讲解。
1、我使用的工具python、Tensorflow,主要用到的是matplotlib。
2、 .csv文件的内容大致如下(其实就是简单的训练数据,被我用来练手啦),如果想要这个文件,请通过评论来联系我,非常欢迎。
3、代码如下:
#encoding: utf-8
import csv
import pandas as pd
import numpy as np
from mpl_toolkits.axisartist.axislines import SubplotZero
from matplotlib.ticker import MultipleLocator, FormatStrFormatter
from matplotlib.lines import Line2D
import matplotlib.pyplot as plt
with open(r".../.csv") as c:
r = csv.reader(c)
step,train_error,validation_error = [],[],[]
index = 0
for i in r :
if(index != 0 ):
step.append(i[1])
train_error.append(i[2])
validation_error.append(i[3])
#print(i)
index =index+1
list = ['step','train_error','validation_error']
lists = {};
lists["step"],lists["train_error"],lists["validation_error"]= step,train_error,validation_error
x=range(0,80000,391)
#plt.ylim(0,0.4)
line2,=plt.plot(x,train_error,'r--',linewidth=0.8)
line3,=plt.plot(x,validation_error,'b-',linewidth=0.8)
ll=plt.legend([line3,line2],["validation_error","train_error"],loc='upper right')
'''
ax1 = plt.gca()
ax1.spines['top'].set_visible(False) #去掉上边框
ax1.spines['right'].set_visible(False) #去掉右边框
'''
plt.grid(axis="y",linestyle='--') #b, which, axis, color, linestyle, linewidth, **kwargs
plt.text(60000,0.13,'validation_error ',fontdict={'size': 9, 'color': 'blue'}) #字体尺寸9,颜色 蓝色 第一和第二个参数60000,0.13表示输出信息的坐标,原点坐标是(0,0)
plt.text(70000,-0.03,'train_error ',fontdict={'size': 9, 'color': 'red'})
plt.ylabel("error(%)",fontsize=11) #设置纵轴单位
plt.xlabel("step",fontsize=11) #设置横轴单位
#plt.title(" ",fontsize=11) #设置图片的头部
plt.savefig('…/1.jpg',dpi=1200) #图片保存位置,图片像素
plt.rcParams['figure.dpi'] =900 #分辨率
plt.show()
以下是运行后的结果,对于我来说,这已经很清晰了呢。
4、如果想要包含次坐标的图,代码如下:
#encoding: utf-8
import csv
import pandas as pd
import numpy as np
from mpl_toolkits.axisartist.axislines import SubplotZero
from matplotlib.ticker import MultipleLocator, FormatStrFormatter
from matplotlib.lines import Line2D
import matplotlib.pyplot as plt
with open(r".../.csv") as c:
r = csv.reader(c)
step,train_error,validation_error = [],[],[]
index = 0
for i in r :
if(index != 0 ):
step.append(i[1])
train_error.append(i[2])
validation_error.append(i[3])
#print(i)
index =index+1
list = ['step','train_error','validation_error']
lists = {};
lists["step"],lists["train_error"],lists["validation_error"]= step,train_error,validation_error
x=range(0,80000,391)
fig, ax1 = plt.subplots()
ax2 = ax1.twinx()
#plt.ylim(0,0.4)
line2,=ax1.plot(x,train_error,'r--',linewidth=0.8)
line3,=ax2.plot(x,validation_error,'b-',linewidth=0.8)
ll=plt.legend([line3,line2],["validation_error","train_error"],loc='upper right')
plt.grid(axis="y",linestyle='--') #b, which, axis, color, linestyle, linewidth, **kwargs
plt.text(60000,0.13,'validation_error ',fontdict={'size': 9, 'color': 'blue'}) #字体尺寸9,颜色 红色) 第一和第二个参数60000,0.13表示输出信息的坐标,原点坐标是(0,0)
plt.text(60000,0.02,'train_error ',fontdict={'size': 9, 'color': 'red'})
ax2.set_ylabel("validation_error",fontsize=11) #设置纵轴单位
ax1.set_ylabel("train_error",fontsize=11)
ax1.set_xlabel("step",fontsize=11) #设置横轴单位
#plt.title(" ",fontsize=11) #设置图片的头部
plt.savefig('…/2.jpg',dpi=1200)
plt.rcParams['figure.dpi'] =900 #分辨率
plt.show()
运行结果如下:
其实只是改动了代码中的一小部分,这个图还有可以改进的地方,下次我会继续讲解哒……