如何利用Python繪制學術論文圖表


論文中圖表形式多樣,常用的處理工具有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 np import 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子圖的圖,且ax2代表的是第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等語句,能使一段代碼如虎添翼,寫在這里,作為給自己的提醒:遇到問題先明確方法、形成體系再進入編寫,不要盲目地將看似正確的語言進行強行拼湊,返工率極高。

畢竟第一篇,有點激動,再特別介紹一下我們團隊的成員吧(雖然只有兩個人):算了還是不介紹了。

 

以上內容若有問題或疑問,請聯系excelting@qq.com


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM