如何構建一個基於可視化理論的完美Python圖表?

2021-01-12 讀芯術

全文共3114字,預計學習時長14分鐘

圖源:unsplash

將數據轉換為可視化圖表是門學問。本文介紹了能從經典的《定量信息的視覺展示》(Edward Tufte)中學到的大部分知識,並向你展示以及如何在Python中實現它。

信息展示的支柱

圖表的完整性

這代表演示的真實性。通過確保正確縮放坐標軸並反映趨勢,可以如實地解釋數據。從長遠來看,真實總是更有價值。每個人都至少目睹過一個帶有非線性y軸的圖,以使假設看起來更有說服力——請發誓永遠不會這樣做。

圖表的卓越性

這代表演示的質量。通過刪除多餘的形狀、分散的顏色和不一致的字體,可以更好地查看數據。根據我(以及Edward Tufte)的經驗,卓越的圖表源於許多小變化累積出的優勢。對圖形的每一處著墨都是至關重要的。

本教程只有所需的少數幾行代碼,以便簡潔真實地展示數據。

對於所有的數據科學家和信息學迷,《定量信息的視覺展示》絕對是一本咖啡桌書籍。在展示信息方面這本書是無可爭議的王,而且趣味性十足。

我一直將書中概述的方法用於在機器人學和機器學習的研究論文中創建功能強大的圖表。以下是幾段摘錄。

具有固有密度的散點圖
穿過由線和標記繪製的離散對象的彩色軌

這篇文章目標有三:

1. 想要確保每個人都能理解使用默認繪圖功能所犯的一些嚴重錯誤。

2. 將Plotly介紹給這些受眾,使用數據並通過探究人工智慧和數據領域的文章來進行自我提升。

3. 涵蓋可視化理論的基礎知識,以及足以使在擁擠數字領域中的工作吸引從業者眼球的先進技術。

本文包含的代碼是對我的教程plot.py的摘錄,我將對其進行擴展使得3d繪圖,動畫等的最佳實踐也包含進來。對兩個繪圖工具Matplotlib和Plotly的使用將貫穿本教程。

Matplotlib的logo;Plotly的logo。

1. Matplotlib: 這一舊的繪圖引擎驅動了眾多先前的實驗代碼,其對工程師的支持已淪為過去。

2. Plotly:數據科學、數據分析以及我的職業生涯未來的繪圖工具。

在整個過程中,plotly可以為用戶提供更多的工具來保持圖形的卓越和完整。

準備

這是將要構建的圖表。有點雜亂,數據簡

本文的末尾敘述了準備(導入和數據加載)的過程,大家可以按需複製。依賴的壁壘很低,因此可以輕鬆獲得頂層繪圖和安全的保存機制。更少的依賴意味著更多的人可以對工作進行分支,複製和構建。

· 數學和數據工具:numpy,pandas

· 系統工具:os,sys

· 易於開發的繪圖工具:matplotlib,matplotlib.pyplot,plotly,plotly.graph_objects

初始化圖表

創建新的數據可視化的第一步是讓用戶為失敗做好準備。始終創建一個坐標軸或一個特定的圖形對象。這樣可以完全控制數據放置的位置和方式。

Plotly已經往前邁出了一步。存在子圖時,Plotly圖形是用每一行和每一列索引的,不像matplotlib必須跟蹤坐標軸的列表(當n=1時,plt.subplots的調用會生效)。

###### Init plot / subplots ######

# mpl

fig_mpl, ax = plt.subplots()# plotly

fig_plo = plotly.subplots.make_subplots(rows=1, cols=1)###### add data ######

for i in range(0, 4):

# mpl

ax.plot(...)

# plotly

fig_plo.add_trace(go.Scatter(...))

刪除多餘的信息

無需使用網格線

數位化和紙質印刷中混亂的最終來源是網格線。即使以PDF格式呈現,網格線也不會看起來很棒(放大並查看網格線的樣子),並且它們很少能幫助專注的讀者進行理解。趨勢能說明一切。

# mpl

ax.grid(False)#plotly

fig.update_layout(xaxis_showgrid=False, yaxis_showgrid=False)

無用的多餘框線

使用空白。在任何介質中,空間都是有限的。將數據裝箱會佔據頁面上可用於展示數據的寶貴空間。右邊和頂上的線應刪除,但有時左邊和底下的線很漂亮。

# mpl

ax.spines['right'].set_visible(False)

ax.spines['top'].set_visible(False)

ax.set_xlabel("Year")

ax.set_ylabel("Market Share (%)")# plotly

fig_plo.update_xaxes(title_text="Year", linecolor='black',

row=1, col=1,zeroline=True,)

fig_plo.update_yaxes(title_text="Market Share", linecolor='black',

row=1, col=1,zeroline=True,)

控制圖例

總會有快速閱讀的讀者在圖表之間掃來掃去。因此要有一個圖例來回答他們什麼代表什麼的問題。Plotly具有很棒的圖例工具,例如分組,始終可見的隱藏項目以及顯示所選圖例條目子集的交互式圖表。

讓用戶查看完整的數據,並通過交互式plotly儀錶板查看他們想要的內容。

# mpl

ax.legend()# plotly

fig_plo.update_layout(showlegend=True,)

一個plotly儀錶板示例

一致的字體

字體大小很重要且應匹配所用媒介

字體經常被忽略。將帶有Arial字體的字體放到帶有Times字體的複雜報表中,總是看起來格格不入。縮放字體大小以(儘量)匹配文本並始終統一字體。

# mpl

font = {'size': 24, 'family': 'serif', 'serif': ['Times']}

matplotlib.rc('font', **font)

matplotlib.rc('text', usetex=True)# plotly

fig_plo.update_layout(font=dict(

family="Times New Roman, Times, serif",

size=24,

color="black"

),

)

可印刷

刪除背景並使用高解析度

始終提高圖表的解析度。默認情況下,它們的dpi和尺寸都小,因此將它們投影到屏幕上幾乎沒用。

圖源:unsplash

Plotly支持在設置解析度以方便查看的同時進行保存,因此在展示時能夠確切地看到想要保存的圖表,在嘗試時就會理解這一優勢。

Matplotlib則將保存與查看分開,這使得使用show()與savefig()會生成不同的圖表,並由此引起麻煩。

# mpl

ax.set_facecolor((1, 1, 1))

# no resolution tool until saving :(# plotly

fig_plo.update_layout(plot_bgcolor='white',)

fig_plo.update_layout(width=1000, height=1000,)

心中有屏幕

低對比色

在屏幕上顯示還不錯的顏色。

在屏幕上繪圖的一個細微要點是決定使用哪種顏色。選取的顏色應是可區分的,以及眼睛易於辨認的。篩選過後的顏色將成為核心顏色。可以查看色圖,我有一些經過嘗試和測試的顏色可供參考。

我的顏色是天藍色#23aaff,紅蘋果#ff6555,苔綠色#66c56c,芥末黃#f4b247。

保存為PDF

可攜式文檔格式(PDF)將圖表另存為一系列彩色矢量對象,因此當它在屏幕上移動或移動到新設備時,它將被重新渲染。PDF使得演示或手稿中無法再有像素圖表。

# mpl

plt.savefig(os.getcwd()+"plop_mpl.pdf", dpi=300)

plt.show()# plotly

fig_plo.write_image(os.getcwd()+"plot_plotly.pdf")

fig_plo.show()

輸出

在滾動滑鼠前,請仔細查看這些圖。看看哪一個更一致且沒有錯誤。以此來決定使用哪個平臺。不要覺得有些錯誤是從源頭上不可避免的。

Plotly

Matplotlib 版本的自動圖例位置完全錯誤,某些字體沒有正確轉換,而且整個圖都不太清晰。我更喜歡plotly的版本,沒有錯誤且清晰。

Plotly改進版

Plotly的API幾乎對繪圖中的每個設置都有一個易於訪問的工具,您可以將它們以一到兩行代碼進行分批傳遞。以下是我喜歡的圖表微調(首選項)的集合。它可以控制圖例的形狀和位置,還能除圖表周圍的空白。試試看並查看相應的API,可以發現大量的工具。

# advanced

fig_plo.update_layout(legend_orientation="h",

legend=dict(x=.6,y=0.07,

bgcolor='rgba(205, 223, 212, .4)',

bordercolor="Black",

),

margin=dict(r=10, l=10, b=10,t=10),

)

plotly的Python API參考——4.6.0文檔:https://plotly.com/python-api-reference/

輸入

筆者喜歡這樣為繪圖腳本/模塊組織導入庫的排列。

# file tools

import os

import sys# plotting tools

import plotly

import plotly.graph_objects as go

import seaborn as sns

import matplotlib

import matplotlib.pyplot as plt# Core

import numpy as np

數據

本教程使用的數據來自一個plotly線圖示例。可以在這裡查看該圖。需要注意的重要一點是,plotly具有出色的色彩科學——在查看電子版圖表時,柔和的色彩對眼睛更友好(總色數r + g + b較低)。

# Frome https://plotly.com/python/line-charts/

title = 'Main Source for News'

labels = ['Television', 'Newspaper', 'Internet', 'Radio']

colors = ['#1f77b4', # muted blue

'#ff7f0e', # safety orange

'#2ca02c', # cooked asparagus green

'#d62728', # brick red

]mode_size = [8, 8, 12, 8]

line_size = [2, 2, 4, 2]x_data = np.vstack((np.arange(2001, 2014),)*4)y_data =np.array([

[74, 82, 80, 74, 73,72, 74, 70, 70, 66, 66, 69],

[45, 42, 50, 46, 36,36, 34, 35, 32, 31, 31, 28],

[13, 14, 20, 24, 20,24, 24, 40, 35, 41, 43, 50],

[18, 21, 18, 21, 16, 14, 13, 18, 17, 16,19, 23],

])

結果賞心悅目,多麼漂亮清晰的圖表呀!

留言點讚關注

我們一起分享AI學習與發展的乾貨

如轉載,請後臺留言,遵守轉載規範

相關焦點

  • 如何在Python中創建交互式可視化?(建議收藏)
    如何在Python中創建交互式可視化。在探索添加更多交互控制項之前,我們將僅以不同格式繪製數據開始。如果您一直關注我一段時間,會注意到這是數據可視化系列文章中的第三篇。首先使用默認的python可視化庫matplotlib引入了數據可視化。然後,我們學習了如何使用相同的庫在時間序列上創建動畫可視化效果。
  • 基於Python的數據可視化庫pyecharts介紹
    pyecharts 是一個用於生成 Echarts 圖表的類庫。 echarts 是百度開源的一個數據可視化 JS 庫,主要用於數據可視化。pyecharts 是一個用於生成 Echarts 圖表的類庫。實際上就是 Echarts 與 Python 的對接。使用 pyecharts 可以生成獨立的網頁,也可以在 flask , Django 中集成使用。
  • 數據可視化最有價值的50個圖表 | 網際網路數據資訊網-199IT | 中文...
    在數據分析和可視化中最有用的 50 個 Matplotlib 圖表。 這些圖表列表允許您使用 python 的 matplotlib 和 seaborn 庫選擇要顯示的可視化對象。這些圖表根據可視化目標的7個不同情景進行分組。 例如,如果要想像兩個變量之間的關係,請查看「關聯」部分下的圖表。 或者,如果您想要顯示值如何隨時間變化,請查看「變化」部分,依此類推。
  • 這10 個 Python 可視化工具,你都用過?
    由於Seaborn是構建在matplotlib的基礎上的,你需要了解matplotlib從而來調整Seaborn的默認參數。 但是跟ggplot不一樣的是,它完全基於Python而不是從R引用過來的。 它的長處在於它能用於製作可交互,可直接用於網絡的圖表。圖表可以輸出為JSON對象,HTML文檔或者可交互的網絡應用。 Boken也支持數據流和實時數據。Bokeh為不同的用戶提供了三種控制水平。
  • 超硬核的 Python 數據可視化教程!
    matplotlibpython中最基本的作圖庫就是matplotlib,是一個最基礎的Python可視化庫,一般都是從matplotlib上手Python數據可視化,然後開始做縱向與橫向拓展。Seaborn是一個基於matplotlib的高級可視化效果庫,針對的點主要是數據挖掘和機器學習中的變量特徵選取,seaborn可以用短小的代碼去繪製描述更多維度數據的可視化效果圖其他庫還包括Bokeh(是一個用於做瀏覽器端交互可視化的庫,實現分析師與數據的交互);Mapbox(處理地理數據引擎更強的可視化工具庫)等等本篇文章主要使用
  • 這幾個常用的python庫你需要知道
    但是對於向小編一樣的小白來說,剛開始學習還是有些困難的,需要首先了解python的一些基礎知識。所以小編就整理了一些常用的python庫,希望對正在學習python的小夥伴有所幫助。1.MatplotlibMatplotlib是一個用於創建二維圖和圖形的底層庫。
  • 數據科學的Python軟體包
    Python有許多用於Data Science的庫,這些庫帶有預構建的複雜算法,因此我們不必從頭開始編寫代碼。平臺無關Python可用於包括window,mac,Linux和Unix在內的各種平臺,因此一次編寫的代碼可以在另一個平臺上運行而無需進行任何更改。
  • 38個常用Python庫:數值計算、可視化、機器學習等8大領域都有了
    Bokeh跟ggplot一樣,Bokeh也基於《圖形語法》的概念。與ggplot不同之處為它完全基於Python而不是從R處引用。長處在於能用於製作可交互、可直接用於網絡的圖表。圖表可以輸出為JSON對象、HTML文檔或者可交互的網絡應用。
  • 學習筆記,從NumPy到Scrapy,學習Python不能錯過這些庫
    二、可視化5. MatplotlibMatplotlib是Python中最常用的可視化工具之一,可以非常方便地創建海量類型地2D圖表和一些基本的3D圖表。Matplotlib最早是為了可視化癲癇病人的腦皮層電圖相關的信號而研發,因為在函數的設計上參考了MATLAB,所以叫做Matplotlib。
  • 可視化工具不知道怎麼選?深度評測5大Python數據可視化工具
    作者 | 劉早起來源 | 早起Python(ID: zaoqi-python)相信很多讀者學習Python就是希望作出各種酷炫的可視化圖表,當然你一定會聽說過Matplotlib、Pyecharts、Seaborn、Plotly、Bokeh這五大工具,本文就將通過真實繪圖來深度評測這五個Python數據可視化的庫,看看到底這幾種工具各有什麼優缺點
  • Python數據可視化實例之繪製圖表
    Python數據可視化實例之繪製圖表原創 蟲蟲安全 2018-09-05 17:41:57得利於語言的簡單明了、豐富的數據結構、豐富的類和模塊,Python如今成了數據科學中的香餑餑,成了matlab、R語言之外又一強大的數據分析工具。拋開其他方面的、今天蟲蟲帶大家一起來探索Python在數據可視化方面的應用。
  • 數據可視化圖表工具有哪些圖表類型?
    大家都聽過「數據可視化」,也知道要用直觀的圖表讓受眾理解複雜多變的數據。但很多人往往只注重讓圖表看上去「高大上」,而忽視了「這些的數據究竟適合哪些圖表來表達」。結果很多人花了大力氣做可視化圖表,卻沒達到想要的效果。 那麼,如何讓數據「說人話」,讓受眾更快速地懂你呢?
  • 7款 Python 工具,讓你在工作上更佔優勢!
    想要成為一個程式設計師,除了學習各種教程之外,熟悉各種已經在生產環境中使用的工具會讓你更快的成長!這裡有7款python工具,是所有數據專家必不可少的工具。當你對他們有一定了解後,會成為你找工作的絕對優勢!
  • 數據可視化當中的圖表組合:比例面積圖
    編輯導讀:優秀的數據可視化依賴優異的設計,並非僅僅選擇正確的圖表模板那麼簡單,數據可視化可以幫助用戶更好地理解數據、運用數據。本文作者從自身經驗出發,結合具體案例分享了比例面積圖的不同組合形式,供大家一同參考學習。
  • B端互動設計——數據可視化圖表
    因此掌握數據可視化能力是設計師必不可少的一個技能,然而目前國內網際網路對於數據的教學不夠全面,這讓很多B端的設計師很苦惱;所以今天我結合自己的工作經驗和大家分享一下——「數據可視化之圖表設計」,為大家梳理一套完整的數據可視化的框架,以及關於可視化設計的基本準則和規範。  幫助大家理解什麼樣的數據對應什麼樣的圖標,了解顏色的意義,知道數據排版的要點。
  • 這10個python數據可視化庫,通吃任何領域
    最高級別是快速創建圖表。它包括創建常見圖表的方法,如條形圖、方框圖和柱狀圖。中間層與matplotlib具有相同的特性,允許你控制每個圖表的基本構建塊(例如散點圖中的點)。最底層面向開發人員和軟體工程師。它沒有預先設置的默認值,並且要求你定義圖表的每個元素。
  • 使用biopython可視化染色體和基因元件
    在biopython中,通過BiolGraphics子模塊可以對基因組結構進行可視化,支持線性和圈圖兩種可視化方式。其中,基因組結構信息存儲在genebank格式的文件中,首先通過Bio.SeqIO讀取結構信息,然後通過Bio.Graphics模塊進行可視化。
  • 基於WebGL的三維數據可視化大屏開發流 ThingJS
    三維數據大屏可視化系統包含多源數據連接、生成二維/三維視圖、構建可視化大屏、大屏功能應用等一體化服務,基於多年可視化項目經驗,ThingJS平臺得出從數據源上傳到可視化大屏應用的完整流程,供參考。(2) 可視化視圖構建功能之圖形展現可視化大屏提供豐富的二維及三維圖形展現, 平面圖表是常見的視圖元素。界面側邊欄提供應有盡有的可視化視圖列表,包含了太陽圖、柱狀圖、餅圖、玫瑰圖、折線圖、雷達圖、靜態和動態地圖、環狀圖、文本標籤雲等常用圖形。用戶點擊可視化視圖選項後,系統會進行視圖類型與數據結構匹配。
  • 強烈推薦一款Python可視化神器!強烈必備!
    事實上,即使沒有 hover_name ,整個圖表也是互動的:也可以通過 facet_col =」continent「 來輕鬆劃分各大洲,就像著色點一樣容易,並且讓我們使用 x軸 對數(log_x)以便在我們在圖表中看的更清晰:也許你不僅僅對 2007年 感興趣,而且你想看看這張圖表是如何隨著時間的推移而演變的。
  • 數據圖表可視化的配色一致性原則
    在論證中,顏色的使用應該基於數據,而不是個人偏好或品牌顏色。接下來我們使用數據分析系統DataFocus所製作的圖表來進行相應的演示。通常,我們在使用顏色時可以遵循以下顏色一致性原則:1.數字指標的一致性當基於某個指標的數值執行顏色映射時,建議使用兩極顏色生長模式的漸變顏色。例如,統計不同地區的銷售情況。左側圖像的顏色沒有顏色系統和生長規律。用戶很難理解特定索引值的含義。此時,如果使用右側的生長顏色系統。