import streamlit as st import matplotlib.pyplot as plt import pandas as pd import numpy as np from pylab import matplotlib from matplotlib import font_manager st.title(":flag-tw: 家庭收支調查") st.header(':grey[縣市每人平均月消費]', divider='rainbow') st.markdown('[*資料來源:行政院主計總處家庭收支調查*](https://www.stat.gov.tw/cp.aspx?n=3914)') cost = pd.read_csv('./dataset/cost.csv', encoding='utf-8') if 'clicked' not in st.session_state: st.session_state.clicked = False def click_button(): st.session_state.clicked = True st.sidebar.subheader('調整參數:') city = st.sidebar.multiselect('選擇想要顯示的**縣市**...', cost.columns, default=["年別", "新北市", "臺北市", "桃園市", "臺中市", "臺南市", "高雄市"]) year_range = st.sidebar.slider('選擇想要顯示的**年份**...', cost['年別'].unique()[0], cost['年別'].unique()[-1], (109, 111), step=1) year = [i for i in range(year_range[0], year_range[1]+1, 1)] st.button('點擊顯示圖表', on_click=click_button) if st.session_state.clicked: st.subheader(f'表1:民國 {year_range[0]} 至 {year_range[1]} 年', divider='grey') cost_select = cost[cost["年別"].isin(year)][city] st.write(cost_select) st.divider() # setup fonts for display mandarin characters font_file = "./fonts/jf-openhuninn-2.0.ttf" # The path to the custom font file. font_manager.fontManager.addfont(font_file) matplotlib.rcParams['font.family'] = ['jf-openhuninn-2.0', 'sans-serif'] col1, col2 = st.columns(2) # 長條圖 with col1: st.pyplot(cost_select.plot(x='年別', kind='bar',title='長條圖').legend(bbox_to_anchor=(1.0, 1.0), fontsize='small').figure) # 堆疊長條圖 with col2: st.pyplot(cost_select.plot(x='年別', kind='bar',title='堆疊長條圖', stacked=True).legend(bbox_to_anchor=(1.0, 1.0), fontsize='small').figure) st.divider() col1, col2 = st.columns(2) # 面積圖 with col1: st.pyplot(cost_select.plot(x='年別', kind='area',title='面積圖', stacked=False).legend(bbox_to_anchor=(1.0, 1.0), fontsize='small').figure) # 堆疊長條圖 with col2: st.pyplot(cost_select.plot(x='年別', kind='area',title='堆疊面積圖', stacked=True).legend(bbox_to_anchor=(1.0, 1.0), fontsize='small').figure) st.divider() col1, col2 = st.columns(2) # 折線圖 with col1: st.pyplot(cost_select.plot(x='年別', kind='line',title='折線圖').legend(bbox_to_anchor=(1.0, 1.0), fontsize='small').figure) # 折線圖,變換線條形式 with col2: st.pyplot(cost_select.plot(x='年別', kind='line',title='折線圖-o', style='-o').legend(bbox_to_anchor=(1.0, 1.0), fontsize='small').figure) st.divider() st.session_state.clicked = False