- Plotly 教程
- Plotly - 首頁
- Plotly - 簡介
- Plotly - 環境設定
- Plotly - 線上和離線繪圖
- 在 Jupyter Notebook 中內聯繪圖
- Plotly - 包結構
- Plotly - 匯出為靜態影像
- Plotly - 圖例
- Plotly - 格式化軸和刻度
- Plotly - 子圖和嵌入圖
- Plotly - 條形圖和餅圖
- Plotly - 散點圖、Scattergl 圖和氣泡圖
- Plotly - 點圖和表格
- Plotly - 直方圖
- Plotly - 箱線圖、小提琴圖和等高線圖
- Plotly - Distplots、密度圖和誤差條形圖
- Plotly - 熱力圖
- Plotly - 極座標圖和雷達圖
- Plotly - OHLC 圖、瀑布圖和漏斗圖
- Plotly - 3D 散點圖和曲面圖
- Plotly - 新增按鈕/下拉選單
- Plotly - 滑塊控制元件
- Plotly - FigureWidget 類
- Pandas 和 Cufflinks 配合 Plotly 使用
- Matplotlib 和 Chart Studio 配合 Plotly 使用
- Plotly 有用資源
- Plotly - 快速指南
- Plotly - 有用資源
- Plotly - 討論
Plotly - 箱線圖、小提琴圖和等高線圖
本章重點介紹各種圖表的詳細理解,包括箱線圖、小提琴圖、等高線圖和矢羽圖。首先,我們將從箱線圖開始。
箱線圖
箱線圖顯示一組資料的摘要,包含最小值、**第一四分位數、中位數、第三四分位數**和**最大值**。在箱線圖中,我們從第一四分位數到第三四分位數繪製一個箱體。一條垂直線穿過箱體上的中位數。從箱體垂直延伸出去,指示上、下四分位數之外變異性的線稱為須線。因此,箱線圖也稱為箱須圖。須線從每個四分位數延伸到最小值或最大值。
要繪製箱形圖,我們必須使用**go.Box()**函式。資料系列可以分配給x或y引數。相應地,箱線圖將水平或垂直繪製。在下面的示例中,某公司各個分支機構的銷售資料被轉換為水平箱線圖。它顯示了最小值和最大值的中間值。
trace1 = go.Box(y = [1140,1460,489,594,502,508,370,200]) data = [trace1] fig = go.Figure(data) iplot(fig)
其輸出如下所示:
**go.Box()**函式可以賦予各種其他引數來控制箱線圖的外觀和行為。其中之一是boxmean引數。
**boxmean**引數預設設定為true。因此,箱體底層分佈的均值在箱體內部以虛線的形式繪製。如果將其設定為sd,則還會繪製分佈的標準差。
**boxpoints**引數預設等於“**outliers**”。僅顯示位於須線之外的樣本點。如果“suspectedoutliers”,則顯示異常值點,並且小於4“Q1-3”Q3或大於4“Q3-3”Q1的點會被突出顯示。如果“False”,則僅顯示箱體,不顯示樣本點。
在下面的示例中,**箱體軌跡**以標準差和異常值點的形式繪製。
trc = go.Box(
y = [
0.75, 5.25, 5.5, 6, 6.2, 6.6, 6.80, 7.0, 7.2, 7.5, 7.5, 7.75, 8.15,
8.15, 8.65, 8.93, 9.2, 9.5, 10, 10.25, 11.5, 12, 16, 20.90, 22.3, 23.25
],
boxpoints = 'suspectedoutliers', boxmean = 'sd'
)
data = [trc]
fig = go.Figure(data)
iplot(fig)
其輸出如下所示:
小提琴圖
小提琴圖類似於箱線圖,不同之處在於它們還顯示了資料在不同值處的機率密度。小提琴圖將包含資料中位數的標記以及表示四分位數間距的箱體,就像標準箱線圖一樣。疊加在這個箱線圖上的是一個核密度估計。與箱線圖一樣,小提琴圖用於表示不同“類別”中變數分佈(或樣本分佈)的比較。
小提琴圖比簡單的箱線圖提供了更多資訊。事實上,箱線圖僅顯示均值/中位數和四分位數間距等彙總統計量,而小提琴圖顯示了**資料的完整分佈**。
**graph_objects**模組中的**go.Violin()**函式返回小提琴圖軌跡物件。為了顯示底層的箱線圖,將**boxplot_visible**屬性設定為True。類似地,透過將**meanline_visible**屬性設定為true,在小提琴圖內部顯示一條對應於樣本均值的線。
以下示例演示瞭如何使用Plotly的功能顯示小提琴圖。
import numpy as np np.random.seed(10) c1 = np.random.normal(100, 10, 200) c2 = np.random.normal(80, 30, 200) trace1 = go.Violin(y = c1, meanline_visible = True) trace2 = go.Violin(y = c2, box_visible = True) data = [trace1, trace2] fig = go.Figure(data = data) iplot(fig)
輸出如下所示:
等高線圖
二維等高線圖顯示二維數值陣列z的等高線,即z的**等值線**的插值線。函式兩個變數的等高線是函式值恆定的曲線,因此曲線連線等值點。
如果您想檢視某個值Z如何隨兩個輸入**X**和**Y**的變化而變化,則等高線圖是合適的,使得**Z = f(X,Y)**。函式兩個變數的等高線或等值線是函式值恆定的曲線。
自變數x和y通常限制在一個稱為網格的規則網格中。numpy.meshgrid根據x值陣列和y值陣列建立一個矩形網格。
讓我們首先使用Numpy庫中的**linspace()**函式為x、y和z建立資料值。我們從x和y值建立**網格**,並獲得由**x2+y2**的平方根組成的z陣列。
我們在**graph_objects**模組中具有**go.Contour()**函式,它接受x、**y**和**z**屬性。以下程式碼片段顯示瞭如上計算的x、**y**和**z**值的等高線圖。
import numpy as np xlist = np.linspace(-3.0, 3.0, 100) ylist = np.linspace(-3.0, 3.0, 100) X, Y = np.meshgrid(xlist, ylist) Z = np.sqrt(X**2 + Y**2) trace = go.Contour(x = xlist, y = ylist, z = Z) data = [trace] fig = go.Figure(data) iplot(fig)
輸出如下所示:
等高線圖可以透過以下一個或多個引數進行自定義:
**轉置(布林值)** - 轉置z資料。
如果**xtype**(或**ytype**)等於“array”,則x/y座標由“x”/“y”給出。如果“scaled”,則x座標由“x0”和“**dx**”給出。
**connectgaps**引數決定是否填充z資料中的間隙。
**ncontours**引數的預設值為15。實際的等高線數量將自動選擇,使其小於或等於`ncontours`的值。僅當`autocontour`為“True”時有效。
等高線型別預設為:“**levels**”,因此資料表示為具有多個級別顯示的等高線圖。如果**constrain**,則資料表示為約束,無效區域的陰影由**operation**和**value**引數指定。
**showlines** - 確定是否繪製等高線。
**zauto**預設為**True**,並確定顏色域是根據輸入資料(此處為`z`)計算,還是根據`**zmin**`和`**zmax**`中設定的邊界計算。當用戶設定`zmin`和`zmax`時,預設為`**False**`。
矢羽圖
矢羽圖也稱為**速度圖**。它以箭頭形式顯示速度向量,其分量為(**u,v**),位於點(x,y)處。為了繪製矢羽圖,我們將使用Plotly中**figure_factory**模組中定義的**create_quiver()**函式。
Plotly的Python API包含一個figure factory模組,其中包含許多包裝函式,這些函式建立了Plotly的開源繪相簿**plotly.js**中尚未包含的獨特圖表型別。
create_quiver()函式接受以下引數:
**x** - 箭頭的x座標
**y** - 箭頭的y座標
**u** - 箭頭向量的x分量
**v** - 箭頭向量的y分量
**scale** - 縮放箭頭的尺寸
**arrow_scale** - 箭頭頭的長度。
**angle** - 箭頭頭的角度。
以下程式碼在Jupyter Notebook中呈現一個簡單的矢羽圖:
import plotly.figure_factory as ff import numpy as np x,y = np.meshgrid(np.arange(-2, 2, .2), np.arange(-2, 2, .25)) z = x*np.exp(-x**2 - y**2) v, u = np.gradient(z, .2, .2) # Create quiver figure fig = ff.create_quiver(x, y, u, v, scale = .25, arrow_scale = .4, name = 'quiver', line = dict(width = 1)) iplot(fig)
程式碼的輸出如下所示: