Python實現(xiàn)平行坐標圖的繪制(plotly)方式
平行坐標圖簡介
當數(shù)據(jù)的維度超過三維時,此時數(shù)據(jù)的可視化就變得不再那么簡單。為解決高維數(shù)據(jù)的可視化問題,我們可以使用平行坐標圖。以下關于平行坐標圖的解釋引自百度百科:為了克服傳統(tǒng)的笛卡爾直角坐標系容易耗盡空間、 難以表達三維以上數(shù)據(jù)的問題, 平行坐標圖將高維數(shù)據(jù)的各個變量用一系列相互平行的坐標軸表示, 變量值對應軸上位置。為了反映變化趨勢和各個變量間相互關系,往往將描述不同變量的各點連接成折線。所以平行坐標圖的實質是將m維歐式空間的一個點Xi(xi1,xi2,...,xim) 映射到二維平面上的一條曲線。在N條平行的線的背景下,(一般這N條線都豎直且等距),一個在高維空間的點可以被表示為一條拐點在N條平行坐標軸的折線,在第K個坐標軸上的位置就表示這個點在第K個維的值。
繪制平行坐標圖
本文主要介紹兩種利用Python繪制平行坐標圖的方法,分別是利用pandas包繪制和利用plotly包繪制(默認已安裝pandas包和plotly包)。
利用pandas實現(xiàn)平行坐標圖的繪制
import matplotlib.pyplot as plt
import pandas as pd
import seaborn as sns
from pandas.plotting import parallel_coordinates
data = sns.load_dataset('iris')
fig,axes = plt.subplots()
parallel_coordinates(data,'species',ax=axes)
fig.savefig('parallel.png')
繪制的平行坐標圖如下所示:

從上圖可以看到x軸上變量共用一個y坐標軸,此時因sepal_length、sepal_width、petal_length以及petal_width這四個變量的值得范圍相近,利用這種方式作出的共用y軸的平行坐標圖有著很好的可視化效果;但假如sepal_length、sepal_width、petal_length以及petal_width這些變量的值的范圍相差較大時,這種共用y軸的平行坐標圖就不再適用,此時我們需要的是y軸獨立的平行坐標圖。下面介紹的另一種方法實現(xiàn)的就是y軸獨立的平行坐標圖。
利用plotly實現(xiàn)平行坐標圖的繪制
plotly繪圖有兩種模式,一種是online模式,另一種是offline模式。本文使用的是offline模式,且是在jupyter notebook中進行繪圖。
首先熟悉一下plotly的繪圖方式:
import plotly as py
import plotly.graph_objs as go
py.offline.init_notebook_mode(connected=True) # 初始化設置
py.offline.iplot({
"data": [go.Parcoords(
line = dict(color = 'blue'),
dimensions = list([
dict(range = [1,5],
constraintrange = [1,2],
label = 'A', values = [1,4]),
dict(range = [1.5,5],
tickvals = [1.5,3,4.5],
label = 'B', values = [3,1.5]),
dict(range = [1,5],
tickvals = [1,2,4,5],
label = 'C', values = [2,4],
ticktext = ['text 1', 'text 2', 'text 3', 'text 4']),
dict(range = [1,5],
label = 'D', values = [4,2])
])
)],
"layout": go.Layout(title="My first parallel coordinates")
})
繪制圖形如下所示:

繪制鳶尾花數(shù)據(jù)的平行坐標圖:
df = sns.load_dataset('iris')
df['species_id'] = df['species'].map({'setosa':1,'versicolor':2,'virginica':3}) #用于顏色映射
py.offline.iplot({
"data": [go.Parcoords(
line = dict(color = df['species_id'],
colorscale = [[0,'#D7C16B'],[0.5,'#23D8C3'],[1,'#F3F10F']]),
dimensions = list([
dict(range = [2,8],
constraintrange = [4,8],
label = 'Sepal Length', values = df['sepal_length']),
dict(range = [1,6],
label = 'Sepal Width', values = df['sepal_width']),
dict(range = [0,8],
label = 'Petal Length', values = df['petal_length']),
dict(range = [0,4],
label = 'Petal Width', values = df['petal_width'])
])
)],
"layout": go.Layout(title='Iris parallel coordinates plot')
})
繪制的圖形如下所示:

注:關于plotly.offline.iplot、go.Parcoords以及go.Layout的用法可以利用help關鍵字查看相關幫助文檔,與pyecharts不同,plotly提供的幫助文檔非常詳細。
以上這篇Python實現(xiàn)平行坐標圖的繪制(plotly)方式就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關文章
報錯No?module?named?numpy問題的解決辦法
之前安裝了Python,后來因為練習使用Python寫科學計算的東西,又安裝了Anaconda,但是安裝Anaconda之后又出現(xiàn)了一個問題,下面這篇文章主要給大家介紹了關于報錯No?module?named?numpy問題的解決辦法,需要的朋友可以參考下2022-08-08
python項目導入open3d后報錯ImportError:DLL load failed:找不到
這篇文章主要介紹了python項目導入open3d后報錯ImportError:DLL load failed:找不到指定的模塊問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2024-08-08
Python使用xlrd和xlwt實現(xiàn)自動化操作Excel
這篇文章主要介紹了Python使用xlrd和xlwt實現(xiàn)自動化操作Excel,xlwt只能對Excel進行寫操作。xlwt和xlrd不光名字像,連很多函數(shù)和操作格式也是完全相2022-08-08
python 字典 setdefault()和get()方法比較詳解
這篇文章主要介紹了python 字典 setdefault()和get()方法比較詳解,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下2019-08-08
Python利用keyboard模塊實現(xiàn)鍵盤記錄操作
模擬鍵盤操作執(zhí)行自動化任務,我們常用的有pyautowin等自動化操作模塊。今天介紹的這個模塊叫做keyboard,它是純Python原生開發(fā),編譯時完全不需要依賴C語言模塊。一行命令就能完成安裝,非常方便,需要的可以了解一下2022-10-10

