Python可視化工具推薦:圖片交互性行極佳的Plotly

2021-01-12 CDA數據分析師

1、 簡單介紹

一般大家在學習python機器學習的時候,用的最多的可視化的包就是matplot和seaborn, 這2個可視化的優點在於門檻低,代碼容易理解,並且容易上手。唯一的可能的缺點就是畫出來的圖不能交互,簡單來說就是matplot和seaborn給出的就是一個圖片,當將滑鼠放到圖上的時候,不會顯示出圖中具體的數字是多少,而使用plotly之後,可以將圖片放大縮小,可以顯示與不顯示不同類別數據,等等。並且更加方便的是,這個圖可以嵌入到html裡面,可以直接放到網頁上面。我們話不多說,用matplot和plotly來展示相同的數據。

當前使用的數據是股票數據,使用pandas_datareader中的yahoo的API下載一些股票數據,將下載阿里巴巴,蘋果,微軟,和IBM的每天最高價,並且做出一個圖出來。

import pandas_datareader as pdrimport numpy as npimport pandas as pd

Stock_list = ['BABA', 'AAPL', 'MSFT', 'IBM']

Data = [pdr.get_data_yahoo(i)['High'] for i in Stock_list]

Data_month = [i.resample('1m').mean() for i in Data]

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,那為什麼我們不介紹echart而介紹python plotly呢,那是因為echart是用java來寫的,並且寫法比較複雜,需要重新學習java語言才能畫出類似的這種可交互的圖出來。但是對於plotly來說的話,我們直接可以用python來寫,並且代碼量比java的少很多,我們可以直接將我們熟悉的python list, numpy, pandas放進去就可以畫圖,並且給出的效果和echart的圖一摸一樣。

另外要提一點的是python plotly也是可以用來做動圖的,我們後面會給大家介紹一種用plolty做出來的用於展示Kmeans算法過程的動圖。在這個動圖中我們則可以很容易的來理解Kmeans的迭代過程。

2 、plotly的安裝

安裝plotly和其他的安裝python包的程序一樣,直接在終端打入以下

pip install -i https://pypi.tuna.tsinghua.edu.cn/simple plotly

這裡為了防止下載速度過慢,加上了清華源的地址。下載好了plotly之後,如果需要使用plotly的話則需要有2種模式,一種是線上,一種是線下。如果是線上的話,則需要註冊一個帳號密碼,然後在notebook裡創造的圖將會同步到plotly的個人云盤裡面去。但是這種操作不是很好,因為一般一個人最多線上存20張圖,之後再做圖就會報錯。所以我們這裡直接介紹offline的模式,也就是線下的模式,這種模式沒有限制。

官網在https://plot.ly/python/, 有的時候需要注意,由於某牆的原因,這個網站會加載的非常慢。這個網頁裡詳細的介紹了各種圖的製作,我們這會簡單的介紹一下scatter plot和給出一個3D圖的例子。

注意在當前markdown文檔裡,plotly給出的圖不能交互,在ipynb和html裡面可以

首先需要import下一線離線的關於plotly的包

from plotly import toolsimport plotly.offline as pypy.offline.init_notebook_mode()import plotly.graph_objs as goimport plotly.figure_factory as ffconfig = {'showLink': False}

3、Scatter Plot 點圖

我們就拿剛才我們下載的IBM的股票數據來畫圖。首先我們看下數據是什麼樣的。我們的數據主要由2部分組成,一個是時間,另一個是每個時間所對應的值。

IBM = result_df['IBM']IBM.head()

Date

2015-01-31 156.116669

2015-02-28 160.925264

2015-03-31 161.106818

2015-04-30 166.431430

2015-05-31 173.346001

Freq: M, Name: IBM, dtype: float64

所以對於這種數據來說,如果我們想給它畫出一個圖出來的話,需要一個x軸和y軸。所以這裡的話需要將時間作為x軸,數據作為y軸。

對於plotly來說,我們需要x和y的數據全部放入一個叫Scatter的類裡面去,並且外面需要用list作為容納Scatter的一個容器。

data = [go.Scatter(x = IBM.index, #x軸上放時間數據

y = IBM.values, #y軸上放具體的數據,不建議放series,可以放array mode = 'markers', #畫出來的圖需要是什麼形式的,這裡指定了點 name = 'IBM' #這一類數據的類別 )]

當data創建好之後,則需要開始創建框架Layout,也就是x軸,y軸,標題,模版等信息,框架創建出來後,可以用來存放剛才寫好的data

layout = go.Layout(title = 'plotly graph for stock data', #這裡指出框架的標題 xaxis = {'title' : 'Date'}, #x軸的標題

yaxis = {'title' : 'High'}, #y軸的標題

template = 'plotly_white' #背景模版,這裡是指背景為白色 )

當layout創建好之後,則需要將data和layout放入Figure這個圖裡面即可

fig = go.Figure(data = data, layout = layout)fig.show()

這裡我們看到了我們只是把各種的點給畫出來了,但是我們面對的數據是時間序列數據,數據不是雜亂無序的。那我們則需要更改下data裡的mode值。

data = [go.Scatter(x = IBM.index,

y = IBM.values,

mode = 'lines+markers', #畫出來的圖需要是什麼形式的,這裡指定了點並且將所有的點以線連起來

name = 'IBM' )]

#layout部分不做任何改變

layout = go.Layout(title = 'plotly graph for stock data', #這裡指出框架的標題 xaxis = {'title' : 'Date'}, #x軸的標題

yaxis = {'title' : 'High'}, #y軸的標題

template = 'plotly_white' #背景模版,這裡是指背景為白色 )

fig = go.Figure(data = data, layout = layout)

fig.show()

那這個時候我們的圖就做出來。現在有個問題是我這裡的圖只是展示出了一個股票,多個股票可以嗎?可以的。當前我們在寫data的時候,可以看出它其實是一個list,當前我們的data list裡面只有一個元素,這個元素就是我們用Scatter創建的一個類,裡面記錄的IBM的數據。所以我們可以在這個list裡面放入多個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 = 'plotly graph for stock data', #這裡指出框架的標題 xaxis = {'title' : 'Date'}, #x軸的標題

yaxis = {'title' : 'High'}, #y軸的標題

template = 'plotly_white' #背景模版,這裡是指背景為白色 )

fig = go.Figure(data = data, layout = layout)

fig.show()

這樣子就可以用來比較了。但是呢我們這裡如果有多個數據需要放入的話,在data裡一行一行的加入股票數據,不方便也不美觀,可以採用列表解析式。列表解析式[i for i in result_df.columns]裡,每個i就是每個股票的名字,用result_df[i]就可以把每個股票都取出來放入一個go.Scatter()裡面,並且name = i,則可以了。並且列表解析給出結果已經是一個list了,所以直接賦值給data進行做圖。

data = [go.Scatter(x = result_df.index,

y = result_df[i].values,

mode='lines+markers',

name=i )

for i in result_df.columns]

layout = go.Layout(title = 'plotly graph for stock data',

xaxis = {'title' : 'Date'},

yaxis = {'title' : 'High'},

template = 'plotly_white' )

fig = go.Figure(data = data, layout = layout)

fig.show()

4、3D-surface圖

這裡我們的圖的代碼不來詳細的介紹,這個在這裡展示出來,給大家看一下plotly做出的3D圖的效果。這裡的例子是參考官網的例子。對於這種3D-surface的圖來說,可以用來很好的展示機器學習中梯度下降的內容。

網址連結: https://plot.ly/python/3d-surface-plots/

plotly這個可視化工具,你可還喜歡?

相關焦點

  • 如何在Python中創建交互式可視化?(建議收藏)
    如何在Python中創建交互式可視化。在探索添加更多交互控制項之前,我們將僅以不同格式繪製數據開始。如果您一直關注我一段時間,會注意到這是數據可視化系列文章中的第三篇。首先使用默認的python可視化庫matplotlib引入了數據可視化。然後,我們學習了如何使用相同的庫在時間序列上創建動畫可視化效果。
  • 可視化工具不知道怎麼選?深度評測5大Python數據可視化工具
    作者 | 劉早起來源 | 早起Python(ID: zaoqi-python)相信很多讀者學習Python就是希望作出各種酷炫的可視化圖表,當然你一定會聽說過Matplotlib、Pyecharts、Seaborn、Plotly、Bokeh這五大工具,本文就將通過真實繪圖來深度評測這五個Python數據可視化的庫,看看到底這幾種工具各有什麼優缺點
  • 這10 個 Python 可視化工具,你都用過?
    就像Chris Moffitt 在「Python可視化工具簡介」中提到的一樣:「功能非常強大,也非常複雜。」 matplotlib 那有著強烈九十年代氣息的默認作圖風格也是被吐槽多年。即將發行的matplotlib 2.0 號稱會包含許多更時尚的風格。
  • 如何構建一個基於可視化理論的完美Python圖表?
    涵蓋可視化理論的基礎知識,以及足以使在擁擠數字領域中的工作吸引從業者眼球的先進技術。本文包含的代碼是對我的教程plot.py的摘錄,我將對其進行擴展使得3d繪圖,動畫等的最佳實踐也包含進來。對兩個繪圖工具Matplotlib和Plotly的使用將貫穿本教程。Matplotlib的logo;Plotly的logo。1.
  • 這幾個常用的python庫你需要知道
    python可以說是近幾年最火熱、最實用的、最容易上手的工具之一了。功能強大、應用廣泛,可以幫你搜集工作數據,還能幫你下載音樂,電影,於是就掀起了一波學習python的大潮,小編也毫不猶豫的加入了。該軟體包適用於交互式Web應用程,可實現輪廓圖、三元圖和三維圖等視覺效果4.BokehBokeh庫使用JavaScript小部件在瀏覽器中創建交互式和可縮放的可視化。該庫提供了多種圖表集合,樣式可能性(stylingpossibilities),連結圖、添加小部件和定義回調等形式的交互能力,以及許多更有用的特性。
  • 太陽圖、平行坐標……5種動態、交互可視化讓數據講出更動聽的故事
    而很多時候,一張漂亮的可視化圖表就足以勝過千言萬語。本文將介紹 5 種基於 Plotly 的可視化方法,你會發現,原來可視化不僅可用直方圖和箱形圖,還能做得如此動態好看甚至可交互。對數據科學家來說,講故事是一個至關重要的技能。為了表達我們的思想並且說服別人,我們需要有效的溝通。而漂漂亮亮的可視化是完成這一任務的絕佳工具。
  • 強烈推薦一款Python可視化神器!強烈必備!
    用 pip install plotly_express 命令可以安裝 Plotly Express。使用 Plotly Express 輕鬆地進行數據可視化一旦導入Plotly Express(通常是 px ),大多數繪圖只需要一個函數調用,接受一個整潔的Pandas dataframe,並簡單描述你想要製作的圖。
  • 使用Plotly創建帶有回歸趨勢線的時間序列可視化圖表數據
    在所有的圖形庫中,Plotly是可視化效果最好的了,但是他也存在一些問題。好的一方面是,Plotly能夠產生出色的可視化效果,並與HTML集成。從不好的是,在單圖和混合圖之間切換時,語法可能會非常混亂。
  • 超硬核的 Python 數據可視化教程!
    matplotlibpython中最基本的作圖庫就是matplotlib,是一個最基礎的Python可視化庫,一般都是從matplotlib上手Python數據可視化,然後開始做縱向與橫向拓展。Seaborn是一個基於matplotlib的高級可視化效果庫,針對的點主要是數據挖掘和機器學習中的變量特徵選取,seaborn可以用短小的代碼去繪製描述更多維度數據的可視化效果圖其他庫還包括Bokeh(是一個用於做瀏覽器端交互可視化的庫,實現分析師與數據的交互);Mapbox(處理地理數據引擎更強的可視化工具庫)等等本篇文章主要使用
  • Cell文獻可視化技巧復現的心得體會
    compare_means()函數:可以進行一組或多組之間的比較,在作圖時選擇正確的統計方法(T-test,秩和檢驗,方差分析,KW檢驗)stat_compare_mean():自動添加p-value、顯著性標記到ggplot圖中 最後,如果以上方法確實無法實現,但比較熟悉python,也可利用python和plotly可視化來實現
  • 使用Pandas,Seaborn和Plotly繪製漂亮的圖表
    完整的代碼以及Python可視化指南,介紹了Pandas,Seaborn和Plotly的繪圖。當我從事地理空間可視化工作時遇到了Bokeh。 但是,我很快意識到,雖然Bokeh與眾不同,但它與matplotlib一樣複雜。Plotly我確實在一段時間前嘗試了plot.ly(從現在開始被稱為plotly)。 再一次,致力於地理空間數據的可視化。 那時,它似乎比前面提到的庫還要不靠譜。需要一個帳戶,必須通過筆記本電腦登錄,然後才能使所有內容在線呈現。
  • 7款 Python 工具,讓你在工作上更佔優勢!
    想要成為一個程式設計師,除了學習各種教程之外,熟悉各種已經在生產環境中使用的工具會讓你更快的成長!這裡有7款python工具,是所有數據專家必不可少的工具。當你對他們有一定了解後,會成為你找工作的絕對優勢!
  • 令人讚嘆的8個Python新手工具!
    4、SeleniumSelenium 是自動化的最佳工具之一。它屬於 Python 測試的自動化。它在 Web 應用程式中用於自動化框架。支持多款主流瀏覽器,提供了功能豐富的API接口,常被用作爬蟲工具。使用它可以用許多程式語言編寫測試腳本,包括Java、C#、python、ruby等。還可以集成 Junit 和 TestNG 等鈾工具來管理測試用例並生成報告。
  • Python數據可視化之高速繪圖神器PyQtGraph庫,強烈建議收藏
    01為什麼使用PyQtGraph庫我們知道,在Python中,已經有了很多可供選擇的數據可視化庫。02什麼是PyQtGraph庫先上個2D繪製效果圖:再來個3D繪製效果圖:PyQtGraph是一個純python的圖形和GUI庫,構建於PyQt4/PySide和numpy之上,它主要用於數學/科學/工程應用方面。
  • 如何在Python中實現交互兩個數
    如何在Python中實現交互兩個數【原理】生活中我們要交互兩個杯中的水,小朋友們都知道我們需要再拿一個空杯子來倒換水,今天我們來探索一下python中如何實現交互兩個數【編程】首先我們需要輸入兩個數x=int(input("x="))
  • 從零開始寫Python爬蟲,四大工具你值得擁有!
    請點擊此處輸入圖片描述當這些你都具備了,這個時候你需要學習:0.基本的爬蟲工作原理1.基本的http抓取工具:scrapy2.Bloom Filter: Bloom Filters by Example3.如果需要大規模網頁抓取,你需要學習分布式爬蟲的概念。
  • 使用biopython可視化染色體和基因元件
    基因組結構元件的可視化有多種方式,比如IGV等基因組瀏覽器中以track為單位的展示形式,亦或以circos為代表的圈圖形式,比如在細胞器基因組組裝中,基因元件常用圈圖形式展示,示例如下
  • 常用的十大 python 圖像處理工具
    圖片來自 Pexels 的Luriko Yamaguchi今天,在我們的世界裡充滿了數據,圖像成為構成這些數據的重要組成部分。它實現了用於研究,教育和工業應用的算法和實用工具。即使是那些剛接觸Python生態系統的人,它也是一個相當簡單直接的庫。此代碼是由活躍的志願者社區編寫的,具有高質量和同行評審的性質。
  • 數據分析從業者必看,10 個加速 python 數據分析的簡單的小技巧
    然而,用這個函數呈現的可視化並不是交互式的,這使得它不那麼吸引人。相反,也不能排除使用 pandas.dataframe.plot()函數繪製圖表的易用性。如果我們不需要對代碼進行重大修改,就可以像繪製 pandas plots 那樣繪出交互式圖表呢?你可以在 Cufflinks 庫的幫助下做到這一點。
  • 應用BioPython解析和可視化蛋白質的結構
    今日我們以Python語言為基礎,調用BioPython框架/模塊,以2003年SARS冠狀病毒的刺突蛋白(spike protein)為例子來實現蛋白質的解析與可視化。BioPython計劃是一個使用Python語言開發計算生物學工具的國際社團,而BioPython是該社團開發的生命科學研究模塊。現在很多生物信息學家、基礎和臨床醫學研究者喜歡使用Python來編程,而調用BioPython模塊/框架可以節省很多時間和精力來實現想要的生物信息學算法。今天咱們就使用BioPython模塊來解析和可視化蛋白質分子。