溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

Python實現(xiàn)平行坐標(biāo)圖的方法有哪些

發(fā)布時間:2021-04-07 09:57:38 來源:億速云 閱讀:291 作者:小新 欄目:開發(fā)技術(shù)

這篇文章給大家分享的是有關(guān)Python實現(xiàn)平行坐標(biāo)圖的方法有哪些的內(nèi)容。小編覺得挺實用的,因此分享給大家做個參考,一起跟隨小編過來看看吧。

平行坐標(biāo)圖,一種數(shù)據(jù)可視化的方式。以多個垂直平行的坐標(biāo)軸表示多個維度,以維度上的刻度表示在該屬性上對應(yīng)值,相連而得的一個折線表示一個樣本,以不同顏色區(qū)分類別。

但是很可惜,才疏學(xué)淺,沒辦法在Python里實現(xiàn)不同顏色來區(qū)分不同的類別。如果對此比較在意的大神可以不要往下看了。。。。。。。。。

Python實現(xiàn)平行坐標(biāo)圖的方法有哪些

上圖是一個基于iris數(shù)據(jù)集所畫的一個平行坐標(biāo)圖。

隔開隔開.......................................隔開隔開

不多扯了,下面正式上代碼

方法一、基于pyecharts第三方包來實現(xiàn)

from pyecharts import Parallel
import matplotlib.pyplot as plt
import pandas as pd
import numpy as np

data = pd.read_csv('iris.csv')
data_1 = np.array(data[['Sepal_length', 'Sepal_width', 'Petal_length', 'Petal_width']]).tolist()

schema = ['Sepal_length', 'Sepal_width', 'Petal_length', 'Petal_width']

parallel = Parallel('iris平行坐標(biāo)圖')
parallel.config(schema)
parallel.add('dasfd',data_1,is_random = True)
parallel

可惜,這樣子run出來的恰好結(jié)果就是上圖,沒辦法實現(xiàn)不同類別用不同顏色來區(qū)分。實在不得不說是一個令人超級不爽的一個地方,勞資都想咋了電腦當(dāng)時,哈哈哈哈。。。

在這里多扯兩句啊,pyecharts這個包還真的是特么的好用啊,各種圖都能實現(xiàn),感興趣的朋友不妨裝個來耍耍

方法二、基于pandas來實現(xiàn)

what?pandas?這把絕世好劍不是用來處理一些數(shù)據(jù)的嗎?什么時候還具有畫圖的功能了,lz你沒貓餅吧?

說實話,lz當(dāng)時也沒想到pandas能用來畫圖,而且是畫平行坐標(biāo)圖。下面就是代碼了:

import matplotlib.pyplot as plt
import pandas as pd
from pandas.tools.plotting import parallel_coordinates

data = pd.read_csv('iris.csv')
data_1 =data[['Species','Sepal_length', 'Sepal_width', 'Petal_length', 'Petal_width']]

parallel_coordinates(data_1,'Species')
plt.legend(loc='upper center', bbox_to_anchor=(0.5,-0.1),ncol=3,fancybox=True,shadow=True)
plt.show()

run一下,就可以得到下圖了

Python實現(xiàn)平行坐標(biāo)圖的方法有哪些

不難看出,這張圖是具有了不同顏色,但是每個坐標(biāo)軸的刻度都是0-8啊,lz希望的是每個軸獨立的啊·········

以上就是我探討在Python里如何實現(xiàn)平行坐標(biāo)圖所得到的一些結(jié)果吧。兩種方式都沒辦法很完美的實現(xiàn)我們的需求(軸獨立、顏色區(qū)別)。正所謂活到老,學(xué)到老。各位大神如果有可以實現(xiàn)的方式,可以教教小弟,小弟不勝感激!

雖然lz沒辦法在Python里畫出滿意的平行坐標(biāo)圖,但是最后也用Echarts實現(xiàn)了一下(哈哈,有時候沒辦法了,不妨試試換個工具)

Python實現(xiàn)平行坐標(biāo)圖的方法有哪些

順道附上代碼吧,不然擔(dān)心被人畫小圈圈

// Schema:
// date,AQIindex,PM2.5,PM10,CO,NO2,SO2
var data1 = [[5.1, 3.5, 1.4, 0.2], [4.9, 3.0, 1.4, 0.2], [4.7, 3.2, 1.3, 0.2], [4.6, 3.1, 1.5, 0.2], [5.0, 3.6, 1.4, 0.2], [5.4, 3.9, 1.7, 0.4], [4.6, 3.4, 1.4, 0.3], [5.0, 3.4, 1.5, 0.2], [4.4, 2.9, 1.4, 0.2], [4.9, 3.1, 1.5, 0.1], [5.4, 3.7, 1.5, 0.2], [4.8, 3.4, 1.6, 0.2], [4.8, 3.0, 1.4, 0.1], [4.3, 3.0, 1.1, 0.1], [5.8, 4.0, 1.2, 0.2], [5.7, 4.4, 1.5, 0.4], [5.4, 3.9, 1.3, 0.4], [5.1, 3.5, 1.4, 0.3], [5.7, 3.8, 1.7, 0.3], [5.1, 3.8, 1.5, 0.3], [5.4, 3.4, 1.7, 0.2], [5.1, 3.7, 1.5, 0.4], [4.6, 3.6, 1.0, 0.2], [5.1, 3.3, 1.7, 0.5], [4.8, 3.4, 1.9, 0.2], [5.0, 3.0, 1.6, 0.2], [5.0, 3.4, 1.6, 0.4], [5.2, 3.5, 1.5, 0.2], [5.2, 3.4, 1.4, 0.2], [4.7, 3.2, 1.6, 0.2], [4.8, 3.1, 1.6, 0.2], [5.4, 3.4, 1.5, 0.4], [5.2, 4.1, 1.5, 0.1], [5.5, 4.2, 1.4, 0.2], [4.9, 3.1, 1.5, 0.1], [5.0, 3.2, 1.2, 0.2], [5.5, 3.5, 1.3, 0.2], [4.9, 3.1, 1.5, 0.1], [4.4, 3.0, 1.3, 0.2], [5.1, 3.4, 1.5, 0.2], [5.0, 3.5, 1.3, 0.3], [4.5, 2.3, 1.3, 0.3], [4.4, 3.2, 1.3, 0.2], [5.0, 3.5, 1.6, 0.6], [5.1, 3.8, 1.9, 0.4], [4.8, 3.0, 1.4, 0.3], [5.1, 3.8, 1.6, 0.2], [4.6, 3.2, 1.4, 0.2], [5.3, 3.7, 1.5, 0.2], [5.0, 3.3, 1.4, 0.2]
];
var data2 = [[7.0, 3.2, 4.7, 1.4], [6.4, 3.2, 4.5, 1.5], [6.9, 3.1, 4.9, 1.5], [5.5, 2.3, 4.0, 1.3], [6.5, 2.8, 4.6, 1.5], [5.7, 2.8, 4.5, 1.3], [6.3, 3.3, 4.7, 1.6], [4.9, 2.4, 3.3, 1.0], [6.6, 2.9, 4.6, 1.3], [5.2, 2.7, 3.9, 1.4], [5.0, 2.0, 3.5, 1.0], [5.9, 3.0, 4.2, 1.5], [6.0, 2.2, 4.0, 1.0], [6.1, 2.9, 4.7, 1.4], [5.6, 2.9, 3.6, 1.3], [6.7, 3.1, 4.4, 1.4], [5.6, 3.0, 4.5, 1.5], [5.8, 2.7, 4.1, 1.0], [6.2, 2.2, 4.5, 1.5], [5.6, 2.5, 3.9, 1.1], [5.9, 3.2, 4.8, 1.8], [6.1, 2.8, 4.0, 1.3], [6.3, 2.5, 4.9, 1.5], [6.1, 2.8, 4.7, 1.2], [6.4, 2.9, 4.3, 1.3], [6.6, 3.0, 4.4, 1.4], [6.8, 2.8, 4.8, 1.4], [6.7, 3.0, 5.0, 1.7], [6.0, 2.9, 4.5, 1.5], [5.7, 2.6, 3.5, 1.0], [5.5, 2.4, 3.8, 1.1], [5.5, 2.4, 3.7, 1.0], [5.8, 2.7, 3.9, 1.2], [6.0, 2.7, 5.1, 1.6], [5.4, 3.0, 4.5, 1.5], [6.0, 3.4, 4.5, 1.6], [6.7, 3.1, 4.7, 1.5], [6.3, 2.3, 4.4, 1.3], [5.6, 3.0, 4.1, 1.3], [5.5, 2.5, 4.0, 1.3], [5.5, 2.6, 4.4, 1.2], [6.1, 3.0, 4.6, 1.4], [5.8, 2.6, 4.0, 1.2], [5.0, 2.3, 3.3, 1.0], [5.6, 2.7, 4.2, 1.3], [5.7, 3.0, 4.2, 1.2], [5.7, 2.9, 4.2, 1.3], [6.2, 2.9, 4.3, 1.3], [5.1, 2.5, 3.0, 1.1], [5.7, 2.8, 4.1, 1.3]
];
var data3 = [[6.3, 3.3, 6.0, 2.5], [5.8, 2.7, 5.1, 1.9], [7.1, 3.0, 5.9, 2.1], [6.3, 2.9, 5.6, 1.8], [6.5, 3.0, 5.8, 2.2], [7.6, 3.0, 6.6, 2.1], [4.9, 2.5, 4.5, 1.7], [7.3, 2.9, 6.3, 1.8], [6.7, 2.5, 5.8, 1.8], [7.2, 3.6, 6.1, 2.5], [6.5, 3.2, 5.1, 2.0], [6.4, 2.7, 5.3, 1.9], [6.8, 3.0, 5.5, 2.1], [5.7, 2.5, 5.0, 2.0], [5.8, 2.8, 5.1, 2.4], [6.4, 3.2, 5.3, 2.3], [6.5, 3.0, 5.5, 1.8], [7.7, 3.8, 6.7, 2.2], [7.7, 2.6, 6.9, 2.3], [6.0, 2.2, 5.0, 1.5], [6.9, 3.2, 5.7, 2.3], [5.6, 2.8, 4.9, 2.0], [7.7, 2.8, 6.7, 2.0], [6.3, 2.7, 4.9, 1.8], [6.7, 3.3, 5.7, 2.1], [7.2, 3.2, 6.0, 1.8], [6.2, 2.8, 4.8, 1.8], [6.1, 3.0, 4.9, 1.8], [6.4, 2.8, 5.6, 2.1], [7.2, 3.0, 5.8, 1.6], [7.4, 2.8, 6.1, 1.9], [7.9, 3.8, 6.4, 2.0], [6.4, 2.8, 5.6, 2.2], [6.3, 2.8, 5.1, 1.5], [6.1, 2.6, 5.6, 1.4], [7.7, 3.0, 6.1, 2.3], [6.3, 3.4, 5.6, 2.4], [6.4, 3.1, 5.5, 1.8], [6.0, 3.0, 4.8, 1.8], [6.9, 3.1, 5.4, 2.1], [6.7, 3.1, 5.6, 2.4], [6.9, 3.1, 5.1, 2.3], [5.8, 2.7, 5.1, 1.9], [6.8, 3.2, 5.9, 2.3], [6.7, 3.3, 5.7, 2.5], [6.7, 3.0, 5.2, 2.3], [6.3, 2.5, 5.0, 1.9], [6.5, 3.0, 5.2, 2.0], [6.2, 3.4, 5.4, 2.3], [5.9, 3.0, 5.1, 1.8]
];
var schema = [
  {name: 'Sepal_length', index: 0, text: 'Sepal_length'},
  {name: 'Sepal_width', index: 1, text: 'Sepal_width'},
  {name: 'Petal_length', index: 2, text: 'Petal_length'},
  {name: 'Petal_width', index: 3, text: 'Petal_width'},
];

var lineStyle = {
  normal: {
    width: 1,
    opacity: 0.5
  }
};

option = {
  legend: {
    top: 0,
    data:['Iris-setosa','Iris-versicolor','Iris-virginica'],
    itemGap: 10
  },
  parallelAxis: [
    {dim: 0, name: schema[0].text},
    {dim: 1, name: schema[1].text},
    {dim: 2, name: schema[2].text},
  ],
  parallel: {
    left: '5%',
    right: '13%',
    bottom: '10%',
    top: '15%',
    parallelAxisDefault: {
      type: 'value',
      name: '平行坐標(biāo)',
      nameLocation: 'end',
      nameGap: 20,
      nameTextStyle: {
        fontSize: 12
      }
    }
  },
  series: [
    {
      name: 'Iris-setosa',
      type: 'parallel',
      lineStyle: lineStyle,
      data: data1
    },
    {
      name: 'Iris-versicolor',
      type: 'parallel',
      lineStyle: lineStyle,
      data: data2
    },
    {
      name: 'Iris-virginica',
      type: 'parallel',
      lineStyle: lineStyle,
      data: data3
    },
  ]  
};

感謝各位的閱讀!關(guān)于“Python實現(xiàn)平行坐標(biāo)圖的方法有哪些”這篇文章就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,讓大家可以學(xué)到更多知識,如果覺得文章不錯,可以把它分享出去讓更多的人看到吧!

向AI問一下細節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI