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

論文中圖表形式多樣,經常使用的處理工具備excel、MATLAB以及Python等,excel自處理的方法有兩個缺陷:1.當數據較多時,容易出現excel「翻白眼」的現象;2.須要使用subplot功能或批量處理時,使用MATLAB或Python更爲方便;3.excel處理的圖在美觀程度上較論文圖表標準有必定的距離。對比MATLAB以及Python的plot功能,從圖的美觀角度出發,Python稍佔優點,下文講簡要介紹將excel中的數據提取到Python中並利用Python的matplotlib庫製圖的過程。python

 

一.如何將Excel中的數據導入Python中:工具

此部分主要介紹如何將Excel中的數據導入python中(原始數據可能在.txt或.out文件中,且數據較爲繁雜,能夠先利用MATLAB或python將數據進行處理存入Excel中,包括一些簡單的計算、排列等,以便於以後的繪圖,或直接利用python提取.txt中數據,在此不作詳細介紹),主要方法是利用python的xlrd庫,流程以下:spa

# 導入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)

 其中有幾個須要說明的點:excel

1.excel_dir和sheetname如何定義?code

excel_dir應寫成字符串的格式(即' '或者" "),最終應以.xls或.xlsx等Excel的後綴結尾,好比讀取Administrator桌面上的名爲result.xls的文件可寫爲:對象

excel_dir = 'C:\Users\Administrator\Desktop\result.xls' data=xlrd.open_workbook(excel_dir)

sheetname定義的方法同上,除此以外sheet還有經過索引順序的讀取方法:blog

table = data.sheets()[0]       #經過索引順序獲取
table = data.sheet_by_index(0) #經過索引順序獲取

2.如何讀取某單元格或者某行的數據?索引

流程中所示爲讀取某sheet中某列的數據,同理某行數據爲:字符串

table.col_values(i)

讀取某單元格數據命令爲:it

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

相關文章
相關標籤/搜索