畢竟是一個看顏值的世界——Python實現從Excel讀取數據並繪製成精美圖像
本教程由付曉亮發布在實驗樓,完整教程、代碼及在線練習地址:Python實現從excel讀取數據並繪製成精美圖像(更多項目請查看Python學習路徑)
這個世界從古至今一直是一個看顏值的世界。對於我們作報告,寫文章時使用的圖片,也是一樣的。一圖勝千言,一張製作精美的圖片,不僅能展示大量的信息,更能體現繪圖者的水平,審美,與態度。
一、課程介紹
1. 內容簡介
使用python從excel讀取數據,並使用matplotlib繪製成二維圖像。這一過程中,將通過一系列操作來美化圖像,最終得到一個可以出版級別的圖像。
2. 課程知識點
使用xlrd擴展包讀取excel數據
使用matplotlib繪製二維圖像
美化圖像,添加標註,注釋,顯示Latex風格公式,坐標點處透明化處理等技巧
3. 適合人群
本課程難度為中等,適合具有Python基礎的用戶,對於需要書寫實驗報告,學位論文,發表文章,做PPT報告的學員具有較大價值。
4. 效果截圖
二、開發準備
打開Xfce終端,下載並安裝的相關依賴 。
$ sudo apt-get update$ sudo apt-get install python-dev$ sudo pip install numpy$ sudo apt-get install python-matplotlib$ sudo pip install xlrd$ sudo apt-get install python-sip$ sudo apt-get install libqt4-dev$ sudo apt-get install python-qt4 python-qt4-dev pyqt4-dev-tools qt4-dev-tools
遇到是否安裝的詢問時,輸入y,按回車鍵繼續安裝。
三、實驗步驟
3.1 繪製一個簡單圖像,測試擴展包安裝是否正常
安裝完成matplotlib後,運行一個小程序測試其是否正常。我們來繪製一個非常簡單的正弦函數。
import numpy as npimport matplotlib.pyplot as pltx = np.linspace(0, 10, 500)dashes = [10, 5, 100, 5] # 10 points on, 5 off, 100 on, 5 offfig, ax = plt.subplots()line1, = ax.plot(x, np.sin(x), "--", linewidth=2, label="Dashes set retroactively")line1.set_dashes(dashes)line2, = ax.plot(x, -1 * np.sin(x), dashes=[30, 5, 10, 5], label="Dashes set proactively")ax.legend(loc="lower right")plt.show()
如果一切正常,應該得到如下顯示的圖片:
這段程序來自官方的常式,只作為檢驗安裝包之用。這個圖片過於簡單,也算不上精美。
3.2 測試xlrd擴展包
xlrd顧名思義,就是excel文件的後綴名.xl文件read的擴展包。這個包只能讀取文件,不能寫入。寫入需要使用另外一個包。但是這個包,其實也能讀取.xlsx文件。
從excel中讀取數據的過程比較簡單,首先從xlrd包導入open_workbook,然後打開excel文件,把每個sheet里的每一行每一列數據都讀取出來即可。很明顯,這是個循環過程。
from xlrd import open_workbookx_data1=[]y_data1=[]wb = open_workbook("phase_detector.xlsx")for s in wb.sheets(): print "Sheet:",s.name for row in range(s.nrows): print "the row is:",row values = [] for col in range(s.ncols): values.append(s.cell(row,col).value) print values x_data1.append(values[0]) y_data1.append(values[1])
如果安裝包沒有問題,這段代碼應該能列印出excel表中的數據內容。解釋一下 這段代碼:打開一個excel文件後,首先對文件內的sheet進行循環,這是最外層循環;在每個sheet內,進行第二次循環,行循環;在每行內,進行列循環,這是第三層循環。在最內層列循環內,取出行列值,複製到新建的values列表內,很明顯,源數據有幾列,values列表就有幾個元素。我們例子中的excel文件有兩列,分別對應「角度」和DC值。所以在列循環結束後,我們將取得的數據保存到x_data1和y_data1這兩個列表中。
3.3 繪製圖像V1.0
第一個版本的功能很簡單,從excel中讀取數據,然後繪製成圖像。具體程序如下:
#!/usr/bin/python#-*- coding: utf-8 -*-import matplotlib.pyplot as pltimport xlrdfrom xlrd import open_workbookx_data=[]y_data=[]x_volte=[]temp=[]wb = open_workbook("my_data.xlsx")for s in wb.sheets(): print "Sheet:",s.name for row in range(s.nrows): print "the row is:",row values = [] for col in range(s.ncols): values.append(s.cell(row,col).value) print values x_data.append(values[0]) y_data.append(values[1]) plt.plot(x_data, y_data, "bo-",label=u"Phase curve",linewidth=1)plt.title(u"TR14 phase detector")plt.legend()plt.xlabel(u"input-deg")plt.ylabel(u"output-V")plt.show()print "over!"
程序簡單,顯示的效果如下:
做到這裡,一組數據的圖像已經完成,不過樣子很醜,我們會在後面的章節進行美化,並學習如何將多組數據展示到同一圖像中。
你可以在原課程中查看完整教程並下載代碼:Python實現從excel讀取數據並繪製成精美圖像
更多經典的編程練手項目:全部課程
微信關注公眾號[實驗樓],手機查看海量項目教程。
推薦閱讀:
※Web開發必備工具箱
※我們採訪了劍橋學生會主席,關於少兒編程他這麼說
※有哪些可以獲取數據的網站?[大數據]
※Python爬蟲實戰入門五:獲取JS動態內容—爬取今日頭條