最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Matplotlib實戰(zhàn)之平行坐標系繪制詳解

 更新時間:2023年08月18日 10:48:58   作者:databook  
平行坐標系是一種統(tǒng)計圖表,它包含多個垂直平行的坐標軸,每個軸表示一個字段,并用刻度標明范圍,下面我們就來看看如何繪制平行坐標系吧

平行坐標系是一種統(tǒng)計圖表,它包含多個垂直平行的坐標軸,每個軸表示一個字段,并用刻度標明范圍。通過在每個軸上找到數(shù)據(jù)點的落點,并將它們連接起來形成折線,可以很容易地展示多維數(shù)據(jù)。

隨著數(shù)據(jù)增多,折線會堆疊,分析者可以從中發(fā)現(xiàn)數(shù)據(jù)的特性和規(guī)律,比如發(fā)現(xiàn)數(shù)據(jù)之間的聚類關(guān)系。

盡管平行坐標系與折線圖表面上看起來相似,但它并不表示趨勢,各個坐標軸之間也沒有因果關(guān)系。

因此,在使用平行坐標系時,軸的順序是可以人為決定的,這會影響閱讀的感知和判斷。較近的兩根坐標軸會使對比感知更強烈。

因此,為了得出最合適和美觀的排序方式,通常需要進行多次試驗和比較。

同時,嘗試不同的排序方式也可能有助于得出更多的結(jié)論。

此外,平行坐標系的每個坐標軸很可能具有不同的數(shù)據(jù)范圍,這容易導致讀者的誤解。

因此,在繪制圖表時,最好明確標明每個軸上的最小值和最大值。

1. 主要元素

平行坐標系是一種常用的數(shù)據(jù)可視化方法,用于展示多個維度的數(shù)據(jù),并通過連接這些維度的線段來揭示它們之間的關(guān)系。

它的主要元素包括:

  • 坐標軸:平行坐標系通常由垂直于數(shù)據(jù)維度的坐標軸組成,每個坐標軸代表一個數(shù)據(jù)維度。
  • 數(shù)據(jù)點:每個數(shù)據(jù)點在平行坐標系中由一條連接各個坐標軸的線段表示,線段的位置和形狀反映了數(shù)據(jù)點在各個維度上的取值。
  • 連接線:連接線用于將同一數(shù)據(jù)點在不同維度上的線段連接起來,形成數(shù)據(jù)點的輪廓,幫助觀察者理解數(shù)據(jù)點在各個維度上的變化趨勢。

2. 適用的場景

平行坐標系適用的場景有:

  • 多維數(shù)據(jù)分析:平行坐標系適用于展示多個維度的數(shù)據(jù),幫助觀察者發(fā)現(xiàn)不同維度之間的關(guān)系和趨勢,例如在探索數(shù)據(jù)集中的模式、異常值或相關(guān)性時。
  • 數(shù)據(jù)分類和聚類:通過觀察數(shù)據(jù)點的輪廓和分布,可以幫助觀察者識別不同的數(shù)據(jù)類別或聚類。
  • 數(shù)據(jù)交互與過濾:平行坐標系可以支持交互式數(shù)據(jù)探索和過濾,通過選擇或操作特定的坐標軸或線段,可以對數(shù)據(jù)進行篩選和聚焦。

3. 不適用的場景

平行坐標系不適用的場景有:

  • 數(shù)據(jù)維度過多:當數(shù)據(jù)維度過多時,平行坐標系的可讀性和解釋性可能會下降,因為線段之間的交叉和重疊會導致視覺混亂。
  • 數(shù)據(jù)維度之間差異較大:如果數(shù)據(jù)在不同維度上的取值范圍差異較大,那么線段之間的比較和分析可能會受到影響,因為較小的取值范圍可能會被較大的取值范圍所掩蓋。
  • 數(shù)據(jù)具有時間序列:平行坐標系并不適用于展示時間序列數(shù)據(jù),因為它無法準確地表示數(shù)據(jù)的時間順序。在這種情況下,其他的數(shù)據(jù)可視化方法,如折線圖或時間軸圖,可能更適合。

4. 分析實戰(zhàn)

平行坐標系適用于展示具有相同屬性的一系列數(shù)據(jù),每個坐標系代表一種屬性。

這次選用了國家統(tǒng)計局公開的教育類數(shù)據(jù):databook.top/nation/A0M

選取其中幾類具有相同屬性的數(shù)據(jù):

  • A0M06:各級各類學校專任教師數(shù)
  • A0M07:各級各類學校招生數(shù)
  • A0M08:各級各類學校在校學生數(shù)
  • A0M09:各級各類學校畢業(yè)生數(shù)

4.1. 數(shù)據(jù)來源

四個原始數(shù)據(jù)集是按照年份統(tǒng)計的:

fp = "d:/share/A0M06.csv"
df = pd.read_csv(fp)
df

這是教師相關(guān)統(tǒng)計數(shù)據(jù),其他3個數(shù)據(jù)集的結(jié)構(gòu)也類似。

4.2. 數(shù)據(jù)清理

平行坐標系比較的是屬性,不需要每年的數(shù)據(jù)。

所以,對于上面4個數(shù)據(jù)集,分別提取2022年小學初中,高中特殊教育相關(guān)4個屬性的數(shù)據(jù)。

import os
files = {
    "教師數(shù)": "A0M06.csv",
    "招生數(shù)": "A0M07.csv",
    "在校學生數(shù)": "A0M08.csv",
    "畢業(yè)學生數(shù)": "A0M09.csv",
}
data_dir = "d:/share"
data = pd.DataFrame()
for key in files:
    fp = os.path.join(data_dir, files[key])
    df = pd.read_csv(fp)
    df_filter = pd.DataFrame(
        [[
            key,
            df.loc[225, "value"],
            df.loc[135, "value"],
            df.loc[90, "value"],
            df.loc[270, "value"],
        ]],
        columns=["name", "小學", "初中", "高中", "特殊教育"],
    )
    data = pd.concat([data, df_filter])
data

4.3. 分析結(jié)果可視化

平行坐標系在 matplotlib 中沒有直接提供,實現(xiàn)起來也不難:

import matplotlib.pyplot as plt
from matplotlib.path import Path
import matplotlib.patches as patches
import numpy as np
xnames = data.loc[:, "name"]
ynames = ["小學", "初中", "高中", "特殊教育"]
ys = np.array(data.iloc[:, 1:].values.tolist())
ymins = ys.min(axis=0)
ymaxs = ys.max(axis=0)
dys = ymaxs - ymins
ymins -= dys * 0.05  # Y軸的上下限增加 5% 的冗余
ymaxs += dys * 0.05
#每個坐標系的上下限不一樣,調(diào)整顯示方式
zs = np.zeros_like(ys)
zs[:, 0] = ys[:, 0]
zs[:, 1:] = (ys[:, 1:] - ymins[1:]) / dys[1:] * dys[0] + ymins[0]
fig, host = plt.subplots(figsize=(10, 4))
axes = [host] + [host.twinx() for i in range(ys.shape[1] - 1)]
for i, ax in enumerate(axes):
    ax.set_ylim(ymins[i], ymaxs[i])
    ax.spines["top"].set_visible(False)
    ax.spines["bottom"].set_visible(False)
    if ax != host:
        ax.spines["left"].set_visible(False)
        ax.yaxis.set_ticks_position("right")
        ax.spines["right"].set_position(("axes", i / (ys.shape[1] - 1)))
host.set_xlim(0, ys.shape[1] - 1)
host.set_xticks(range(ys.shape[1]))
host.set_xticklabels(ynames, fontsize=14)
host.tick_params(axis="x", which="major", pad=7)
host.spines["right"].set_visible(False)
host.xaxis.tick_top()
host.set_title("各類學校的師生數(shù)目比較", fontsize=18, pad=12)
colors = plt.cm.Set1.colors
legend_handles = [None for _ in xnames]
for j in range(ys.shape[0]):
    verts = list(
        zip(
            [x for x in np.linspace(0, len(ys) - 1, len(ys) * 3 - 2, endpoint=True)],
            np.repeat(zs[j, :], 3)[1:-1],
        )
    )
    codes = [Path.MOVETO] + [Path.CURVE4 for _ in range(len(verts) - 1)]
    path = Path(verts, codes)
    patch = patches.PathPatch(
        path, facecolor="none", lw=2, alpha=0.7, edgecolor=colors[j]
    )
    legend_handles[j] = patch
    host.add_patch(patch)
host.legend(
    xnames,
    loc="lower center",
    bbox_to_anchor=(0.5, -0.18),
    ncol=len(xnames),
    fancybox=True,
    shadow=True,
)
plt.tight_layout()
plt.show()

從圖表中,可以看出一下幾點,和我們對實際情況的印象是差不多的:

  • 教師數(shù)量遠小于學生數(shù)量
  • 從小學到初中,高中,學生數(shù)量不斷減少
  • 招生數(shù)量和畢業(yè)生數(shù)量差不多

平行坐標系用于比較不同數(shù)據(jù)集相同屬性。

以上就是Matplotlib實戰(zhàn)之平行坐標系繪制詳解的詳細內(nèi)容,更多關(guān)于Matplotlib平行坐標系的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • python如何調(diào)用字典的key

    python如何調(diào)用字典的key

    在本篇文章里小編給大家分享的是關(guān)于python調(diào)用字典的key方法實例,有興趣點朋友們可以參考學習下。
    2020-05-05
  • Python如何讀取MySQL數(shù)據(jù)庫表數(shù)據(jù)

    Python如何讀取MySQL數(shù)據(jù)庫表數(shù)據(jù)

    這篇文章主要為大家詳細介紹了Python如何讀取MySQL數(shù)據(jù)庫表數(shù)據(jù),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-03-03
  • 深度解析Python中的方法綁定機制

    深度解析Python中的方法綁定機制

    這篇文章主要介紹了Python的方法綁定機制,重點探討bound method的工作原理及其背后的描述符協(xié)議,文中的示例代碼講解詳細,感興趣的小伙伴可以了解下
    2026-03-03
  • Python中字典的淺拷貝與深拷貝用法實例分析

    Python中字典的淺拷貝與深拷貝用法實例分析

    這篇文章主要介紹了Python中字典的淺拷貝與深拷貝用法,結(jié)合實例形式分析了字典淺拷貝與深拷貝的原理、區(qū)別與使用方法,需要的朋友可以參考下
    2018-01-01
  • Pyqt的QTableWidget組件的使用

    Pyqt的QTableWidget組件的使用

    QTableWidget是PyQt6中的一個表格控件,用于顯示和編輯二維表格數(shù)據(jù),本文主要介紹了Pyqt的QTableWidget組件的使用,具有一定的參考價值,感興趣的可以了解一下
    2025-05-05
  • 基于Django模板中的數(shù)字自增(詳解)

    基于Django模板中的數(shù)字自增(詳解)

    下面小編就為大家?guī)硪黄贒jango模板中的數(shù)字自增(詳解)。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-09-09
  • python采用requests庫模擬登錄和抓取數(shù)據(jù)的簡單示例

    python采用requests庫模擬登錄和抓取數(shù)據(jù)的簡單示例

    這篇文章主要介紹了python采用requests庫模擬登錄和抓取數(shù)據(jù)的簡單示例,代碼簡單卻功能強大!需要的朋友可以參考下
    2014-07-07
  • Python3中對range()逆序的解釋

    Python3中對range()逆序的解釋

    這篇文章主要介紹了Python3中對range()逆序的解釋,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-05-05
  • Python PyQt5中彈出子窗口解決子窗口一閃而過的問題

    Python PyQt5中彈出子窗口解決子窗口一閃而過的問題

    這篇文章主要介紹了Python PyQt5中彈出子窗口解決子窗口一閃而過的問題,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2021-03-03
  • python網(wǎng)絡編程之多線程同時接受和發(fā)送

    python網(wǎng)絡編程之多線程同時接受和發(fā)送

    這篇文章主要為大家詳細介紹了python網(wǎng)絡編程之多線程同時接受和發(fā)送,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-09-09

最新評論

岳阳市| 天水市| 泸州市| 新巴尔虎左旗| 德保县| 大埔区| 五峰| 馆陶县| 盘锦市| 巴彦淖尔市| 林口县| 无极县| 白水县| 万州区| 电白县| 满洲里市| 湾仔区| 乃东县| 芜湖市| 诏安县| 密云县| 高陵县| 威海市| 定兴县| 彭州市| 双江| 鄂州市| 女性| 南乐县| 天水市| 江阴市| 青神县| 九龙城区| 黄山市| 剑河县| 嵊州市| 英德市| 措勤县| 深水埗区| 弋阳县| 大厂|