資料視覺化(Data Visualization) - Python 套件 - 互動式繪圖 - 散點圖、子圖實作、多圖堆疊應用 - Plotly筆記(二)
Github連結
1. 散點圖
plotly.graph_objs.Scatter()裡面的參數介紹
用於繪製數據點(散點)
symbol: markers的圖形,可以傳入一些整數(int),變換不同圖形或圖形角度,也可以傳入像是'star'來直接改變圖形
舉例
a. 點(marker)
import plotly.graph_objs as go import plotly.offline as pof import numpy as np ## 設定為離線 pof.init_notebook_mode(connected = True) ## data 1 ## 隨機產生2000個二維數據 x = np.random.randn(2000) y = np.random.randn(2000) data1 = go.Scatter( x = x, y = y, marker = {'color': 'blue', 'symbol': 104, 'size': 4}, mode = 'markers', name = 'data1' ) ## data2 ## 隨機產生1000個二維數據 x1 = np.random.randn(1000) y1 = np.random.randn(1000) data2 = go.Scatter( x = x1, y = y1, marker = {'color': 'red', 'size': 4}, mode = 'markers', name = 'data2' ) ## 將data1和data2裝進串列 data = [data1, data2] ## 介面設定 layout = go.Layout( title = "Plotly Scatter", xaxis = {'title': 'x軸'}, yaxis = {'title': 'y軸'}, font = { 'size': 28, 'family': 'serif', 'color': '#D9006C' }) ## 結合數據與介面 figure = go.Figure(data = data, layout = layout) ## 繪圖 pof.iplot(figure, filename = 'Plotly-Scatter', show_link = True, link_text = "Plotly Links", image_height = 800, image_width = 900)
執行結果
b.點(marker)+線(lines)+文字(text)
import plotly.graph_objs as go import plotly.offline as pof pof.init_notebook_mode(connected = True) ## 數據 ## go.Scatter() ## marker: 記號點, symbol - 調整樣式 ## mode: 圖像的種類,可以單獨寫text, lines, markers,也可以加在一起混合使用: text+lines 或 markers+lines 或 markers + lines + text等各種組合 ## text: 標記上的文字 ## name: 數據名稱 data1 = go.Scatter( x = [2, 7, 9], y = [18, 16, 8], marker = {'color': 'blue', 'symbol': 104, 'size': 20}, mode = "markers+lines+text", text = ["First", "Second", "Third"], name = 'data1' ) data2 = go.Scatter( x = [1, 7, 8], y = [2, 18, 20], marker = {'color': 'red', 'symbol': 106, 'size': 20}, mode = "markers+lines", text = ["First", "Second", "Third"], name = 'data2' ) ## 介面 layout = go.Layout(title = "Plotly Scatter", xaxis = {'title': 'x軸'}, yaxis = {'title': 'y軸'}) ## 將data和介面結合 figure = go.Figure(data = [data1, data2], layout = layout) ## 繪圖 pof.iplot(figure, filename = 'First Plotly', show_link = True, link_text = "Plotly Links", image = 'png', image_height = 800, image_width = 900)
執行結果
c. 綜合圖
import plotly.graph_objs as go import plotly.offline as pof import numpy as np ## 設定為離線 pof.init_notebook_mode(connected = True) ## data 1 ## 隨機產生100個二維數據 x = np.random.randn(100) y = np.random.randn(100) data1 = go.Scatter( x = x, y = y, marker = {'color': 'blue', 'symbol': 104, 'size': 4}, mode = 'markers', name = 'markers' ) ## data2 x1 = [v for v in range(-2, 4)] y1 = np.random.randn(10) - 5 data2 = go.Scatter( x = x1, y = y1, marker = {'color': 'red', 'size': 4}, mode = 'markers', name = 'lines' ) ## data3 x2 = [v for v in range(-2, 4)] y2 = np.random.randn(10) - 10 data3 = go.Scatter( x = x2, y = y2, marker = {'color': 'yellow', 'size': 10}, mode = 'lines+markers', name = 'lines+markers' ) ## data4 x3 = [v for v in range(-2, 4)] y3 = np.random.randn(10) - 20 data4 = go.Scatter( x = x3, y = y3, marker = {'color': 'black', 'size': 10}, mode = 'lines+markers+text', text = ["First", "Second", "Third", "Forth", "Fifth", "Sixth"], name = 'lines+markers+text' ) ## 將data1和data2裝進串列 data = [data1, data2, data3, data4] ## 介面設定 layout = go.Layout( title = "Plotly Scatter", xaxis = {'title': 'x軸'}, yaxis = {'title': 'y軸'}, font = { 'size': 28, 'family': 'fantasy', 'color': '#D9006C' }) ## 結合數據與介面 figure = go.Figure(data = data, layout = layout) ## 繪圖 pof.iplot(figure, filename = 'Plotly-Scatter', show_link = True, link_text = "Plotly Links", image_height = 800, image_width = 900)
執行結果
d. 設定tick來改變介面樣子
在前一篇我有提到許多Layout可以使用的參數,這邊我就拿幾個來實作給大家看,大家也可以根據這些參數來調整看看,可以產生許多不同的效果
import plotly.graph_objs as go import plotly.offline as pof import numpy as np ## 設定為離線 pof.init_notebook_mode(connected = True) ## data 1 ## 隨機產生2000個二維數據 x = np.random.randn(2000) y = np.random.randn(2000) data1 = go.Scatter( x = x, y = y, marker = {'color': 'blue', 'symbol': 104, 'size': 4}, mode = 'markers', name = 'data1' ) ## 將data1裝進串列 data = [data1, data2] ## 介面設定 layout = go.Layout( title = "Plotly Scatter", xaxis = {'title': 'x軸', 'gridwidth': 4, 'showgrid': True, 'gridcolor': 'pink', 'side': 'top', 'tickcolor': "blue", 'zeroline': True}, yaxis = {'title': 'y軸', 'gridwidth': 2, 'showgrid': True, 'gridcolor': 'black', 'side': 'right'}, font = { 'size': 28, 'family': 'serif', 'color': '#D9006C' }) ## 結合數據與介面 figure = go.Figure(data = data, layout = layout) ## 繪圖 pof.iplot(figure, filename = 'Plotly-Scatter', show_link = True, link_text = "Plotly Links", image_height = 800, image_width = 900)
執行結果
e. 設定legend來顯示數據資訊
import plotly.graph_objs as go import plotly.offline as pof import numpy as np ## 設定為離線 pof.init_notebook_mode(connected = True) ## data 1 ## 隨機產生2000個二維數據 x = np.random.randn(2000) y = np.random.randn(2000) data1 = go.Scatter( x = x, y = y, marker = {'color': 'blue', 'symbol': 104, 'size': 4}, mode = 'markers', name = 'data1' ) ## data2 ## 隨機產生1000個二維數據 x1 = np.random.randn(1000) y1 = np.random.randn(1000) data2 = go.Scatter( x = x1, y = y1, marker = {'color': 'red', 'size': 4}, mode = 'markers', name = 'data2' ) ## 將data1和data2裝進串列 data = [data1, data2] ## 介面設定 layout = go.Layout( title = "Plotly Scatter", xaxis = {'title': 'x軸'}, yaxis = {'title': 'y軸'}, font = { 'size': 28, 'family': 'serif', 'color': '#D9006C' }, showlegend = True, legend = { 'x': 0.6, 'yanchor': 'middle', 'bgcolor': 'pink', 'bordercolor': 'black' } ) ## 結合數據與介面 figure = go.Figure(data = data, layout = layout) ## 繪圖 pof.iplot(figure, filename = 'Plotly-Scatter', show_link = True, link_text = "Plotly Links", image_height = 800, image_width = 900)
執行結果
f. 設定hoverlabel,來控制鼠標移入數據的特效
我將鼠標移入後的字體變成咖啡色,背景變成黃色
import plotly.graph_objs as go import plotly.offline as pof import numpy as np ## 設定為離線 pof.init_notebook_mode(connected = True) ## data 1 ## 隨機產生2000個二維數據 x = np.random.randn(2000) y = np.random.randn(2000) data1 = go.Scatter( x = x, y = y, marker = {'color': 'blue', 'symbol': 104, 'size': 4}, mode = 'markers', name = 'data1' ) ## data2 ## 隨機產生1000個二維數據 x1 = np.random.randn(1000) y1 = np.random.randn(1000) data2 = go.Scatter( x = x1, y = y1, marker = {'color': 'red', 'size': 4}, mode = 'markers', name = 'data2' ) ## 將data1和data2裝進串列 data = [data1, data2] ## 介面設定 layout = go.Layout( title = "Plotly Scatter", xaxis = {'title': 'x軸'}, yaxis = {'title': 'y軸'}, font = { 'size': 28, 'family': 'serif', 'color': '#D9006C' }, showlegend = True, legend = { 'x': 0.6, 'yanchor': 'middle', 'bgcolor': 'pink', 'bordercolor': 'black' } , hoverlabel = { 'bgcolor': 'yellow', 'bordercolor': 'black', 'namelength': -1, 'font': {'color': 'brown'} } ) ## 結合數據與介面 figure = go.Figure(data = data, layout = layout) ## 繪圖 pof.iplot(figure, filename = 'Plotly-Scatter', show_link = True, link_text = "Plotly Links", image_height = 800, image_width = 900)
執行結果
2. 子圖的應用
- 欲繪製子圖,我們需要導入plotly.subplots裡面的make_subplots套件
- 使用add_trace()來增加子圖數量
## 導入套件 import plotly.graph_objs as go from plotly.subplots import make_subplots ## 構建一個2X2的大圖 fig = make_subplots(rows = 2, cols = 2) ## 構建子圖 ## 子圖1 fig.add_trace( go.Scatter(x = [8, 2, 6, 10, 14, 18], y = [18, 14, 12, 20, 24, 28], mode = 'markers', name = 'Scatter'), row = 1, col = 1 ) ## 子圖2 fig.add_trace( go.Scatter(x = [8, 2, 6, 10, 14, 18], y = [18, 14, 12, 20, 24, 28], mode = 'lines', name = 'Lines'), row = 1, col = 2 ) ## 子圖3 fig.add_trace( go.Bar(x = [8, 2, 6, 10, 14, 18], y = [18, 14, 12, 20, 24, 28], name = 'Bar'), row = 2, col = 1 ) ## 子圖1 fig.add_trace( go.Histogram(x = [8, 2, 6, 10, 14, 18], y = [18, 14, 12, 20, 24, 28], name = 'Histogram'), row = 2, col = 2 ) ## 顯示圖片 fig.show()
執行結果
3. 多組圖繪製於一起
- 使用add_trace()這個函式功能可以將多組圖繪製在一起
- 舉例: 實現在同一張圖上擁有柱狀圖和折線圖
## 導入套件 import plotly.graph_objs as go ## 構建一個圖形板 fig = go.Figure() ## 加入各種類型的圖 ## 折線圖 fig.add_trace( go.Scatter(x = [1, 2, 6, 10, 14, 18], y = [18, 14, 12, 20, 24, 28], mode = 'lines', name = 'lines') ) ## 柱狀圖 fig.add_trace( go.Bar(x = [1, 2, 6, 8, 10, 12, 14, 18], y = [18, 14, 12, 20, 24, 26, 28, 30], name = 'Bar') ) ## 顯示圖片 fig.show()
執行結果
接下來我會開始使用Plotly來實作各種圖形喔,有興趣的大家可以在跟著我繼續學習
Reference
https://www.youtube.com/watch?v=ifYugIP0pPQ
htts://plotly.com/python/
https://www.cnblogs.com/feffery/p/9293745.html
https://blogs.csdn.net/u012897374/article/details/77857980
https://images.plot.ly/plotly-documentation/images/python_cheat_sheet.pdf