早年间我用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功能;