优秀的图片交互优点是门槛低,代码通俗易懂,上手简单。唯一可能的缺点是无法与绘制的图形进行交互。简单的说,matplot和seaborn给个图。当鼠标放在图形上时,图形中的具体数字将不会显示。使用plotly后,可以对图片进行放大缩小,显示或不显示不同类型的数据等。而且更方便的是,这张图片可以嵌入到html中,直接放在网页上。话不多说,用matplot和plotly展示同样的数据。当前使用的数据是股票数据。使用pandas_datareader中的yahooAPI下载一些股票数据。它会下载阿里巴巴、苹果、微软、IBM的每日最高价,并做成图表。importpandas_datareaderaspdrimportnumpyasnpiimportpandasaspdStock_list=['BABA','AAPL','MSFT','IBM']Data=[pdr.get_data_yahoo(i)['High']foriinStock_list]Data_month=[i.resample('1m').mean()foriinData]result_df=pd.concat(Data_month,axis=1)result_df.columns=Stock_list首先我们做一个matplot图,因为DataFrame自带plot函数,我们可以直接使用.plot()方法输出图片。result_df.plot()然后看看我们用plotly给出的效果,代码部分后面会给出。从这个gif我们可以很明显的看出plotly的图片交互性很好(如果看不到动图,可能是上传的问题),如果下载的是html文件,这种图片也会嵌入到html文件中,也会保持这个交互功能。那么我们什么时候使用matplot或plotly呢?个人认为对于机器学习的结果,用matplot来测试模型的结果就足够了,比如检查是否过拟合,AUCROC图。而plotly更适合作为报表系统,因为对于报表来说,不仅要展示图表的一般信息,比如上图中每只股票的走势,还要看图表是否能体现更多的细节,让决策者发现更重要的信息。在这种情况下,plotly是一个不错的选择。市面上也有一款非常流行的软件叫echart,那为什么我们要剧情介绍python而不是echart呢?那是因为echart是用java写的,写法比较复杂。需要重新学习java语言才能画出类似这样的交互图。但是对于plotly,我们可以直接用python写,代码量比java少很多。我们可以直接把熟悉的pythonlist、numpy、pandas放进去画,给出的效果和echart的图一模一样。另外要提的是pythonplotly也可以用来制作动画。后面我们会介绍一个用plolty制作的动画来展示Kmeans算法的过程。在这个动画中,我们可以很容易地理解Kmeans的迭代过程。安装plotly安装plotly与安装python包的其他程序相同。直接在终端输入如下pipinstall-ihttps://pypi.tuna.tsinghua.edu.cn/simpleplotly防止下载速度太慢,加在清华园地址上。plotly下载后,如果需要使用plotly,需要有两种模式,一种是在线模式,另一种是离线模式。如果在线的话,需要注册一个账号密码,然后在notebook中创建的graph会同步到plotly的个人云盘中。但是这种操作不太好,因为一般一个人最多可以在线存20张图片,以后再做图片会报错。所以这里直接介绍离线模式,也就是离线模式,没有任何限制。官方网站位于https://plot.ly/python/。有时你需要注意。由于一定的墙,这个网站会加载很慢。本网页详细介绍了各种图形的制作。我们将简要介绍散点图并给出一个3D图形的示例。注意,在目前的markdown文档中,plotly给出的图形是不能交互的。在ipynb和html中,可以先从plotlyimporttoolimportplotly.offlineaspypy.offline.init_notebook_mode()importplotly导入下行关于plotly的离线包。graph_objsasgoimportplotly.figure_factoryasffconfig={'showLink':False}散点图我们将使用刚才下载的IBM股票数据来绘制图形。首先,让我们看看数据是什么样的。我们的数据主要由2部分组成,一是时间,二是每个时间对应的值。IBM=result_df['IBM']IBM.head()Date2015-01-31156.1166692015-02-28160.9252642015-03-31161.1068182015-04-30166.4314302015-05-31173.346016此类数据的NameFloat我们想为它画一个图,我们需要一个x轴和y轴。所以这里,需要以时间为x轴,以数据为y轴。对于plotly来说,我们需要把x和y的所有数据都放到一个叫Scatter的类中,外面需要用list作为Scatter的容器。data=[go.Scatter(x=IBM.index,#x轴放时间数据y=IBM.values,#y轴放具体数据,不建议放series,可以放arraymode='markers',#绘制的图需要是什么形式这里指定点名='IBM'#该类数据的类别)]数据创建完成后,需要开始创建frameLayout,即x轴,y轴,还有title,templates等信息,frame创建好后,可以用来存放刚才写的datalayout},#x轴的titleyaxis={'title':'High'},#y轴模板的标题='plotly_white'#背景模板,这里指的是背景为白色)创建布局时需要设置数据和布局即可放入Figure的图中fig=go.Figure(data=data,layout=layout)fig.show()这里看到我们只是绘制各种点,但是我们面对的数据是时间序列数据,数据不是偶然的。然后我们需要更改数据中的模式值。data=[go.Scatter(x=IBM.index,y=IBM.values,mode='lines+markers',#绘制的图形是什么形状的?这里指定点,所有的点都用线连接起来name='IBM')]#layout部分不做任何改动layout=go.Layout(title='plotlygraphforstockdata',#这里表示frame的标题xaxis={'title':'Date'},#x轴的标题yaxis={'title':'High'},#y轴的标题template='plotly_white'#背景模板,这里指的是背景是白色)fig=go.Figure(data=data,layout=layout)fig.show()那么这个时候我们的图就做出来了。现在有一个问题,我这里的图片只显示一只股票,是否可以有多只股票?好的。我们当前在写入数据的时候,可以看到它其实是一个列表。目前,我们的数据列表中只有一个元素。这个元素是我们用Scatter创建的一个类,里面记录了IBM的数据。所以我们可以在这个列表中放多个Scatter来记录不同的股票数据AAPL=result_df['AAPL']data=[go.Scatter(x=IBM.index,y=IBM.values,mode='lines+markers',name='IBM'),go.Scatter(x=AAPL.index,y=AAPL.values,mode='lines+markers',name='AAPL')]layout=go.Layout(title='股票数据的绘图',#这里是frame的标题xaxis={'title':'Date'},#x轴的标题yaxis={'title':'High'},#y轴的标题template='plotly_white'#背景模板,这里指的是背景为白色)fig=go.Figure(data=data,layout=layout)fig.show()这个可以用来对比。但是如果我们有多个数据要放在这里,在数据中逐行添加股票数据既不方便也不美观,所以我们可以使用列表分析。列表分析公式[iforiinresult_df.columns]中,每个i是每只股票的名字,可以把每只股票拿出来放到一个go.Scatter()和result_df[i]中,名字=我,那就可以了。而列表分析给出的结果已经是一个列表,所以直接赋值给data进行绘制。data=[go.Scatter(x=result_df.index,y=result_df[i].values,mode='lines+markers',name=i)foriinresult_df.columns]layout=go.Layout(title='plotlygraphforstockdata',xaxis={'title':'Date'},yaxis={'title':'High'},template='plotly_white')fig=go.Figure(data=data,layout=layout)fig.show()3D-surfacediagram这里就不详细介绍图的代码了,这里展示这个是为了给大家展示plotly制作的3D图的效果。这里的例子是官网的例子。对于这种3D-surfacegraph,可以用来表示机器学习中梯度下降的内容。网址链接:https://plot.ly/python/3d-sur...你还喜欢plotly这个可视化工具吗?文渊网,仅供学习,侵删。学习Python的路上肯定会遇到困难,不要慌张,我这里有一套学习资料,包括40+电子书,800+教学视频,涉及Python基础、爬虫、框架、数据分析、机学习等等,别怕你学不会!https://shimo.im/docs/JWCghr8...《Python学习资料》关注公众号【蟒圈】,每日优质文章推送。
