「跟著黑蛋用Streamlit速成天文資料分析Web App」系列文[13]:用Plotly繪製系外行星資料統計圖

就在黑蛋切下一塊鹹派時,PM貳婰舞來電了。

「客戶蠻滿意目前系外行星資料表篩選器頁面的功能,我們可以接續開發下一個頁面了。如之前討論,為了視覺化系外行星資料表的資料,新頁面需要呈現互動式的統計圖,客戶想要了解各種發現系外行星的方法所佔的比例,以及行星質量、半徑、軌道週期、發現年份等欄位不同數值區間的個數統計。」

黑蛋品嚐完那塊美味的鹹派後,準備開工以程式作畫。

他之前瀏覽Streamlit的說明文件時,已經知道Streamlit有支援不同的資料視覺化Python套件,除了基本款Matplotlib之外,還有強調互動性能的BokehVega-AltairPlotly,黑蛋選擇曾在其他專案用過的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)國際版授權條款」釋出。

Subscribe to 天文背包黑客
Receive the latest updates directly to your inbox.
Mint this entry as an NFT to add it to your collection.
Verification
This entry has been permanently stored onchain and signed by its creator.