Plotly - 條形圖和餅圖



在本章中,我們將學習如何藉助 Plotly 建立條形圖和餅圖。讓我們首先了解條形圖。

條形圖

條形圖使用矩形條表示分類資料,條形的高度或長度與其表示的值成正比。條形圖可以垂直或水平顯示。它有助於顯示離散類別之間的比較。圖表的一個軸顯示要比較的特定類別,另一個軸表示測量的值。

以下示例繪製了一個簡單的**條形圖**,顯示了不同課程的學生註冊人數。**go.Bar()** 函式返回一個條形軌跡,其 x 座標設定為科目列表,y 座標設定為學生人數。

import plotly.graph_objs as go
langs = ['C', 'C++', 'Java', 'Python', 'PHP']
students = [23,17,35,29,12]
data = [go.Bar(
   x = langs,
   y = students
)]
fig = go.Figure(data=data)
iplot(fig)

輸出結果如下所示:

Bar Chart

要顯示分組條形圖,必須將 Layout 物件的**barmode** 屬性設定為**group**。在以下程式碼中,表示每一年學生人數的多個軌跡相對於科目繪製,並顯示為分組條形圖。

branches = ['CSE', 'Mech', 'Electronics']
fy = [23,17,35]
sy = [20, 23, 30]
ty = [30,20,15]
trace1 = go.Bar(
   x = branches,
   y = fy,
   name = 'FY'
)
trace2 = go.Bar(
   x = branches,
   y = sy,
   name = 'SY'
)
trace3 = go.Bar(
   x = branches,
   y = ty,
   name = 'TY'
)
data = [trace1, trace2, trace3]
layout = go.Layout(barmode = 'group')
fig = go.Figure(data = data, layout = layout)
iplot(fig)

其輸出結果如下所示:

Grouped Bar Chart

**barmode** 屬性決定了在圖形上如何顯示位於相同位置座標處的條形。定義的值為“stack”(條形堆疊在一起),“relative”(條形堆疊在一起,負值位於軸下方,正值位於軸上方),“**group**”(條形並排繪製)。

透過將 barmode 屬性更改為“**stack**”,繪製的圖形如下所示:

Stack Plotted Graph

餅圖

餅圖僅顯示一個數據系列。**餅圖**顯示一個數據系列中專案的尺寸(稱為**扇形**),與專案的總和成正比。資料點顯示為整個餅圖的百分比。

**graph_objs** 模組中的**pie()** 函式 - **go.Pie()**,返回一個餅圖軌跡。兩個必需的引數是**labels** 和**values**。讓我們繪製一個簡單的語言課程與學生人數的餅圖,如以下示例所示。

import plotly
plotly.tools.set_credentials_file(
   username = 'lathkar', api_key = 'U7vgRe1hqmRp4ZNf4PTN'
)
from plotly.offline import iplot, init_notebook_mode
init_notebook_mode(connected = True)
import plotly.graph_objs as go
langs = ['C', 'C++', 'Java', 'Python', 'PHP']
students = [23,17,35,29,12]
trace = go.Pie(labels = langs, values = students)
data = [trace]
fig = go.Figure(data = data)
iplot(fig)

以下輸出顯示在 Jupyter Notebook 中:

Pie Chart

**環形圖**是一種餅圖,中間有一個圓形孔,使其看起來像甜甜圈。在以下示例中,兩個環形圖以 1X2 網格佈局顯示。雖然兩個餅圖軌跡的“**label**”佈局相同,但每個子圖的行和列目標由 domain 屬性決定。

為此,我們使用 2019 年議會選舉中各政黨席位和得票率的資料。在 Jupyter Notebook 單元格中輸入以下程式碼:

parties = ['BJP', 'CONGRESS', 'DMK', 'TMC', 'YSRC', 'SS', 'JDU','BJD', 'BSP','OTH']
seats = [303,52,23,22,22,18,16,12,10, 65]
percent = [37.36, 19.49, 2.26, 4.07, 2.53, 2.10, 1.46, 1.66, 3.63, 25.44]
import plotly.graph_objs as go
data1 = {
   "values": seats,
   "labels": parties,
   "domain": {"column": 0},
   "name": "seats",
   "hoverinfo":"label+percent+name",
   "hole": .4,
   "type": "pie"
}
data2 = {
   "values": percent,
   "labels": parties,
   "domain": {"column": 1},
   "name": "vote share",
   "hoverinfo":"label+percent+name",
   "hole": .4,
   "type": "pie"
}
data = [data1,data2]
layout = go.Layout(
   {
      "title":"Parliamentary Election 2019",
      "grid": {"rows": 1, "columns": 2},
      "annotations": [
         {
            "font": {
               "size": 20
            },
            "showarrow": False,
            "text": "seats",
            "x": 0.20,
            "y": 0.5
         },
         {
            "font": {
               "size": 20
            },
            "showarrow": False,
            "text": "votes",
            "x": 0.8,
            "y": 0.5
         }
      ]
   }
)
fig = go.Figure(data = data, layout = layout)
iplot(fig)

其輸出結果如下所示:

Donut Chart
廣告