就在黑蛋切下一塊鹹派時,PM貳婰舞來電了。
「客戶蠻滿意目前系外行星資料表篩選器頁面的功能,我們可以接續開發下一個頁面了。如之前討論,為了視覺化系外行星資料表的資料,新頁面需要呈現互動式的統計圖,客戶想要了解各種發現系外行星的方法所佔的比例,以及行星質量、半徑、軌道週期、發現年份等欄位不同數值區間的個數統計。」
黑蛋品嚐完那塊美味的鹹派後,準備開工以程式作畫。
他之前瀏覽Streamlit的說明文件時,已經知道Streamlit有支援不同的資料視覺化Python套件,除了基本款Matplotlib之外,還有強調互動性能的Bokeh、Vega-Altair和Plotly,黑蛋選擇曾在其他專案用過的Plotly來當作他的畫筆。
他先新增一個命名為03_Exoplanet_statistical_charts.py的Python script放到pages資料夾中,讓使用者能在「太陽系外行星資料分析app」中切換到「系外行星資料統計圖」頁面 。然後在該script中,以plotly.express.pie繪製系外行星發現方法的圓餅圖,並且用plotly.express.histogram繪製行星質量、半徑、軌道週期、發現年份等欄位的直方圖,此外,為了在Streamlit頁面上呈現Plotly的圖,需要透過st.plotly_chart元件。最後,黑蛋用st.columns元件讓兩種圖能並排在同一列。
# 03_Exoplanet_statistical_charts.py
import plotly.express as px
def plot_discovery_method_piechart(exoplanet_table):
fig = px.pie(
exoplanet_table, names='發現方法', color='發現方法', title='各種發現系外行星方法的佔比'
)
return st.plotly_chart(fig, use_container_width=True)
def plot_histogram(exoplanet_table, column_name):
fig = px.histogram(
exoplanet_table, x=column_name, nbins=100,
)
fig.update_layout(
yaxis_title='數量'
)
return st.plotly_chart(fig, use_container_width=True)
# 中略
col1, col2 = st.columns(2)
with col1:
plot_discovery_method_piechart(exoplanet_table)
with col2:
column_name = st.radio(
'切換直方圖要統計數量的欄位',
['發現年份', '行星質量(單位:地球質量)', '行星半徑(單位:地球半徑)', '行星軌道週期(單位:天)'],
horizontal=True
)
plot_histogram(exoplanet_table, column_name)
此系列文由蘇羿豪撰寫,以「創用CC 姓名標示 4.0(CC BY 4.0)國際版授權條款」釋出。此系列文也同步在Matters及Mirror平台連載。