論文中圖表形式多樣,常用的處理工具有excel、MATLAB以及Python等,excel自處理的方法有兩個缺陷:
1.當數據較多時,容易出現excel「翻白眼」的現象;
2.需要使用subplot功能或批次處理時,使用MATLAB或Python更為方便;
#3.excel處理的圖在美觀程度上較論文圖表標準有一定的距離。比較MATLAB以及Python的plot功能,從圖的美觀角度出發,Python稍佔優勢,下文講簡要介紹將excel中的資料提取到Python中並利用Python的matplotlib庫製圖的過程。
一.如何將Excel中的資料匯入Python中:
此部分主要介紹如何將Excel中的資料導入python中(原始資料可能在.txt或.out檔案中,且資料較為繁雜,可以先利用MATLAB或python將資料處理存入Excel中,包含一些簡單的計算、排列等,以便於之後的繪圖,或直接利用python提取.txt中數據,在此不做詳細介紹),主要方法是利用python的xlrd庫,流程如下:
# 导入xlrd库 import xlrd # 读取指定Excel文件(此处为excel_dir)中的数据 data=xlrd.open_workbook(excel_dir) # 读取指定data中某sheet(此处命名为sheetname)中的数据 table=data.sheet_by_name(sheetname) #读取table中某一列的数据 needs=table.col_values(0)
其中有幾個需要說明的點:
1.excel_dir和sheetname如何定義?
excel_dir應寫成字串的格式(即' '或" "),最終應以.xls或.xlsx等Excel的後綴結尾,例如讀取Administrator桌面上的名result.xls的檔案可寫成:
excel_dir = 'C:\Users\Administrator\Desktop\result.xls'data=xlrd.open_workbook(excel_dir)
sheetname定義的方法同上,除此之外sheet還有透過索引順序的讀取方法:
table = data.sheets()[0] #通过索引顺序获取 table = data.sheet_by_index(0) #通过索引顺序获取
#2.如何讀取某一單元格或某行的資料?
流程中所示為讀取某sheet中某列的數據,同理某行數據為:
table.col_values(i)
讀取某單元格資料指令為:
table.cell(i,j).value
3.讀取某行或某列資料時,資料的範圍是什麼?
舉例:當某sheet中表格如下時,會讀取4×3表格中的資料。
#即若想讀取B列數據,程式碼要寫為
table.col_values(1)
注意:python是從0開始計數的,故column number應為1,此時計入的資訊為:[u'' ,u'',4,u'']
且注意table的維度由各個sheet決定,及若某excel表格有多個sheet,可能出現list長度不同的情況。
4.如果想取某一列2-5行如何做呢?
table.col_values(i)[1:5]
5.若想取到最後一個數字,該如何寫程式碼?
由於各行/列的資料型態可能不同,可能會出現第一列僅4個數字,而第二列有9個數字,而最多的一列有100個數字等類似的情況,若直接用取整列的指令,會使list中摻入u'',導致下一步的繪圖出錯,此時可以使用如下方法:
a_col=table.col_values(i) a=a_col[0,a_col.index(u'')]
但需注意,此指令不能對控制行數的列使用,否則也會報錯,可編寫其他判斷語句進行鑑別是否使用該指令。
二.如何利用Python進行繪圖:
這裡介紹利用matplotlib函式庫進行繪圖的方法,首先應匯入matplotlib函式庫:
#import numpy as npimport matplotlib.pyplot as plt
##繪圖方法很簡單,大致流程如下:
# 绘图命令,1为图号,并设置figsize fig_drift= plt.figure(1,figsize=(12,4)) # 设置数据在x轴和y轴的坐标,以及颜色、标签等属性,此处用了两组数据 plt.plot(drift[0], story,"g-",label='$Damped$') plt.plot(drift[1], story,"r-.",label='$Undamped$') # 设置x轴和y轴的标签 plt.xlabel('Drift') plt.ylabel('Storey') # 选择显示数据组标签 plt.legend() # 设置x轴和y轴的间隔及范围 plt.xticks((0.000,0.005,0.010,0.015)) plt.yticks(range(1,5,1)) # 设置图名 plt.title('minor')
#其中需要說明的幾點:
1.如何繪製多圖?
很簡單,只要在設定了圖號名稱之後,插入:
ax2 = plt.subplot(132) plt.sca(ax2)
后面的命令与前述一致,值得一提的是,plt.subplot(131)指的是绘制一个含有1×3子图的图,且ax1代表的是第2张图,而plt.sca(ax2)表示选择该子图。
2.设置x轴、y轴以及其他命令如何判断是赋予哪张图的属性呢?
matplotlib会直接将该属性赋予上一plot对象。
3.如何绘制散点图?
把pl.plot(x, y)改成pl.plot(x, y, 'o')即可。
4.其他一些设置参数:
# 设置x轴和y轴的上下限 pl.xlim(i, j) pl.ylim(m,n) # 显示图 pl.show() # 保存图,自动存为png格式 plt.savefig(dir+name.png,dpi=600)
除此之外还支持设置x轴(y轴)坐标显示,绘制饼状图、直方图等功能,在此不再一一介绍。
三.说点题外话:
曾经看过一句话:“世界上没有烂语言,只有写语言的烂人”。
每种语言各自有其优势,也有其劣势,在此不做过多评价。如何利用语言实现绘图或达到更多目标,在于我们如何选择。恰到好处地使用for或def、class等语句,能使一段代码如虎添翼,写在这里,作为给自己的提醒:遇到问题先明确方法、形成体系再进入编写,不要盲目地将看似正确的语言进行强行拼凑,返工率极高。
更多如何利用Python繪製學術論文圖表方法相关文章请关注PHP中文网!