早年間我用R語言作圖較多,切換到python后對於更加復雜環境下的支持更加強大,但是我也需要在python中解決作圖的困擾。做出一份好圖或者一份漂亮的優質報告,需要設置很多參數,其工作量不亞於做一個小網站。但是一份耕耘受用一生,還是值得不斷努力探索的。
首先從呈現容器上,1)可以直接figure.show出圖表結果,2)利用jupyter notebook的功能內嵌在.ipynb中,3)做個flash,django框架的網站 靜態動態圖片支持一網打盡 ,4)用pychart實現本地級別的,可以利用xml內嵌入office組件,也可用瀏覽器打開,動態靜態顯示結果。 5)做個GUI 實現 等等。
從作圖工具上, 1)matplotlib,這個包非常龐大,而且有些功能要想實現,恐怕要引用很多東西,同時由於python不同版本的問題,代碼並不是絕對通用的,最好還是有個穩定的python版本。因為此package已經存在很長時間,資源量應該是最大的,當然無效信息量也很大。 2)pychart,沒錯它不僅僅是個容器還包括畫圖,同時對於三維立體圖形的呈現效果,動態圖形的呈現效果更理想。3)kepler.gl 比較適合在jupyter notebook中使用;基於map進行的一些繪圖會有意想不到的驚艷效果。
綜合來看,對於可視化呈現效果要求不同的團隊還是需要各取所需的。如果能力足夠這根本不是事兒,前端展現方面JS是最好的選擇。但是就我個人需求來看,更加傾向於輕量級的,研究性質的具有一定交互功能的圖表制作效果即可滿足需要。故重點推薦matplotlib,pychart這兩個package的應用。
python常用的數據分析庫pandas中也有plot功能,但是它並不與matplotlib十分沖突,還是可以相互兼容的。但是在具體使用過程中我還是發現了很多的問題。比如從mongodb中讀取的數據集如果直接裝到pd中,是做不到很理想的plot效果的(主要原因是時間類型的問題,以及索引列的設置);但是pandas對於csv文件具有很好地支持。
# pandas.plot的使用注意事項
import pandas as pd import matplotlib.pyplot as plt from pymongo import MongoClient %matplotlib inline # 連接數據庫 MC = MongoClient() # 數據表 fangyuan = MC["dbName]["coltName"] # 將mongodb中的數據讀出 data = pd.DataFrame(list(fangyuan.find())) data.to_csv('szHousePrice.csv',encoding='utf-8') # # 讀取csv數據 # df = pd.read_csv('szHousePrice.csv',low_memory=False,index_col=0)
df = pd.read_csv('szHousePrice.csv', index_col=0, parse_dates=[0])
# 查看數據大小(行列)
data.shape
# 查看數據行號
data.columns
# 找出所有滿足字段的行
df1 = data.loc[:,["tradetime","price"]]
當index的數據類型是<class 'pandas._libs.tslibs.timestamps.Timestamp'>的時候,作圖結果的橫坐標依然是數字,而不是日期;這是因為timestamp數據類型經過csv轉儲之后被識別成str類型;依然不能夠被看成是datetime;
如果日期是像我這樣來自mongodb的時間戳格式的話,請特別注意這個坑;如果要深度拓展,盡量避免使用pandas.plot功能;