用python绘制实验数据的图线
支持中文
python3是支持中文的,包括中文路径与文件名等,通常都不需要特殊设置。但是对于matplotlib,则需要进行设置,否则输入的中文不能正常显示,而是会显示成一个个的方框。可以使用下面的两行代码来解决这个问题。
plt.rcParams['font.sans-serif']=['SimHei']
plt.rcParams['axes.unicode_minus'] = False
其中,rcParams是一个类似字典的对象。sans-serif
表示无衬线字体,那么这第一行代码似乎是把无衬线字体的默认值设置为了微软雅黑。有另一篇博客也做了一定的解释。
找到需要的文件
import csv
import os
def fget(path,data):
dirs = os.listdir(path)
num = 1
for file0 in dirs:
if os.path.splitext(file0)[1] == ".csv":
csvget(path,file0,data, num)
num += 1
return(data)
def csvget(path,file,data,num):
reader=csv.reader(open(path+'/'+file,encoding='utf-8'))
sindata = []
for i,rows in enumerate(reader):
sindata.append(rows)
data['%d'%(num)] = sindata[14:85]
return(data)
这里定义了两个函数,fget
和csvget
,实际上参考后文,写一个txtget
或者excelget
也不是难事。前一个函数负责从文件夹里挑出需要的文件(后文在介绍os.listdir函数的时候会提到可以顺便遍历子文件夹),后一个函数负责从文件中把需要的行摘出来(在之后介绍csv文件读取的时候会提到)。
而以上代码中出现的data
是一个字典,其键是人为定义的,可以是序号123,可以是文件名的某几位,这种设计是为了方便地找到data
中所需的单个文件的数据。
os.listdir函数
listdir
函数遍历path
下的每一个文件的名字,并把子文件夹当成一个文件(不看里面的内容),最终返回一个列表,里面是子文件与子文件夹的名字(字符串)。如果想看子文件夹里具体内容的话,可以稍后改一下path
再listdir
一次。比如这样——
for file0 in dirs:
if file0[-4] == '0':
fget(path + '\\' + file0, data)
elif os.path.splitext(file0)[1] == ".csv":
csvget(path,file0,data)
上面这段代码通过看名字来判断是不是文件夹,这属于见机行事的范畴。如果文件名这个字符串的倒数第四位是'0'
,则改一下path,再调用一次fget
函数,否则,判断文件类型,并对需要的文件直接调用自定义的csvget
函数,进行下一步操作。
os.path.splitext函数
这个函数分离文件名与扩展名,由此可以从文件夹中挑出特定类型的文件。
if os.path.splitext(file0)[1] == ".csv":
csvget(path,file0,data)
如以上的代码挑出来的就是.csv文件,将其路径,文件名与data(是自建的一个字典)送入自建的csvget
函数。
从不同类型的文件中导入数据
作图的基本思路是将横纵坐标对应的值从文件中提取出来并存储在list
中,接着使用matlpotlib.pyplot库将两个或多个数组分别作为横坐标与纵坐标(们)作图。最后是对坐标轴、图例等信息进行编辑。
从EXCEL表格中导入数据
#从EXCEL文件中导入数据
import xlrd
book = xlrd.open_workbook("你的文件名.xlsx")
#book.nsheets可以查看到在Book对象中的文件有多少个worksheet
#book.sheet