| 函式名稱 | 說明 |
|---|---|
| st.line_chart() | 繪製折線圖,適合用來呈現時間序列或連續變化的資料。 |
| st.bar_chart() | 繪製長條圖,適合用來比較各分類資料的數值大小。 |
| st.scatter_chart() | 繪製散佈圖,用於顯示兩個變數之間的關係(需 DataFrame 格式資料)。 |
| st.area_chart() | 繪製區域圖,類似折線圖,但底部會填滿陰影,強調總量變化。 |
| st.map() | 在地圖上繪製地理座標點,支援 DataFrame 中包含緯度與經度的資料。 |
2. 長條圖函式 st.bar_chart() :
st.bar_chart() 可將資料視覺化為橫向或直向的長條圖, 適合展示分類資料的數量, 總和, 平均等比較資訊, 例如產品銷售統計 (每月銷售量, 各類別營收), 分類數據比較 (男女比例, 各縣市人數), 或
每日/每週的數值分佈 (網站流量, 實驗測試結果) 等.
參數結構與 st.line_chart() 相同 :
st.bar_chart(
data=None,
x=None,
y=None,
width=None,
height=None,
use_container_width=True
)
參數說明如下表 :
| st.line_chart() 參數 | 說明 |
|---|---|
| data | 要繪製的資料,可為 pandas DataFrame、numpy array 或 dict。 |
| x | 指定 x 軸的欄位名稱或索引,僅適用於 DataFrame。 |
| y | 指定 y 軸的欄位名稱 (可為單一欄位或其串列),僅適用於 DataFrame。 |
| width | 圖表寬度(像素),預設為 0,表示由系統自動決定。 |
| height | 圖表高度(像素),預設為 0。 |
| use_container_width | 是否讓圖表自動填滿容器寬度 (預設 True,有設 width 時須設 False)。 |
注意, 雖然 data 參數不是必要, 但通常需提供, 未傳入 data 參數不會報錯, 而是會繪製一張空白的圖表.
例如 :
測試 2-1 : 用長條圖比較營收的逐月變化 (1) [看原始碼]
# st-bar-chart-test-1.py
import streamlit as st
import pandas as pd
# 模擬每月營收資料
data=pd.DataFrame({
'月份': ['一月', '二月', '三月', '四月', '五月'],
'營收': [120000, 135000, 99000, 150000, 170000]
})
st.subheader('今年前五月月營收長條圖')
# 繪製 bar chart
st.bar_chart(data=data, x='月份', y='營收')
此例直接用 x 與 y 參數指定 X 與 Y 軸的資料欄位, 結果如下 :
也可以用 DataFrame 的 set_index() 指定索引欄位, Streamlit 會自動以索引為 X 軸, 然後再選取要輸出的欄位當 Y 軸 (必須是數值欄位, 若含有其它非數值欄位則必須選取), 例如 :
測試 2-2 : 用長條圖比較營收的逐月變化 (2) [看原始碼]
# st-bar-chart-test-2.py
import streamlit as st
import pandas as pd
# 模擬每月營收資料
data=pd.DataFrame({
'月份': ['一月', '二月', '三月', '四月', '五月'],
'營收': [120000, 135000, 99000, 150000, 170000]
})
st.subheader('今年前五月月營收長條圖')
# 繪製 bar chart
chart_data=data.set_index('月份')['營收']
st.bar_chart(data=chart_data)
結果與上例一樣.
下面範例是 Y 軸資料有兩個的情形 :
測試 2-3 : 用長條圖比較營收的逐月同比變化 [看原始碼]
# st-bar-chart-test-2.py
import streamlit as st
import pandas as pd
# 模擬每月營收資料
data=pd.DataFrame({
'月份': ['一月', '二月', '三月', '四月', '五月'],
'今年營收': [120000, 135000, 99000, 150000, 170000],
'去年營收': [110000, 125000, 95000, 145000, 160000]
})
st.subheader('今年 vs 去年前五個月營收比較')
# 繪製 bar chart
chart_data=data.set_index('月份')[['去年營收', '今年營收']]
st.bar_chart(data=chart_data)
此例的 DataFrame 中添加了去年營收這一欄, 要繪製的 Y 軸變數有兩個, 因此無法使用 x 與 y 參數, 這時要利用 set_index() 函式來指定 '月份' 欄為索引, Streamlit 會自動將索引欄做為 X 軸, 然後選取 '去年營收' 與 '今年營收' 這兩欄為要顯示的資料傳給 st.bar_chart() 繪製 (這動作雖然不是必要, 但此函式會試圖繪製所有非索引欄位, 若 DataFrame 中有非數值欄位就會報錯), 結果如下 :
可見 st_bar_chart() 會把兩個 Y 軸以堆疊方式繪製, 而非以 grouped (兩個 Y 軸並排) 方式. 因為 st.bar_chart() 是一個簡化的 API, 它是使用 Altair 的堆疊模式 (stacked) 實作的. 如果想繪製群組式的直條圖, 那就要直接使用 Altair 了.


沒有留言 :
張貼留言