首先這是我們的資料
import pandas as pd
data = pd.read_csv("太陽光電業務資訊.csv")
再來我們修改與建立幾個會用到的欄位
data["總裝置容量kwp(萬)"] = (data["總裝置容量kwp"]/10000).round()
data["平均每件容量kwp(萬)"] = data["總裝置容量kwp(萬)"]/data["總件數"]
修改後的資料如下
但因為資料的最後有一筆總計資料如下圖
我們想把總計拿掉,不要出現在圖表中,所以先如下操作
#篩選出總計那一行,並取得總計的索引值
n = data["行政區別"][data["行政區別"].values == "總計"].index.astype(int)[0]
#將總計那一行拿掉
data.drop([n],inplace=True)
接著,我們就可以開始繪圖了:
import matplotlib
#設定中文字型
matplotlib.rc("font",family="Microsoft YaHei")
from matplotlib import pyplot as plt
#設定圖的大小
plt.figure(figsize=(8,8),facecolor="lightgray")
#設定子圖位置
ax0 = plt.subplot2grid((1,1),(0,0),colspan=1,rowspan=1)
#設定x、y變數
ax0_x = data["總裝置容量kwp(萬)"]
ax0_y = data["總件數"]
#建立隨著決定點的大小變化的函數
ax0_z = data["平均每件容量kwp(萬)"]/(data["平均每件容量kwp(萬)"].max())
#繪製散布圖
ax0.scatter(ax0_x,ax0_y,marker="o",s=ax0_z*500,alpha=0.5,color="orange",label="平均每件容量kwp(萬)")
#設定x、y座標軸名稱
ax0.set_xlabel("總裝置容量kwp(萬)")
ax0.set_ylabel("總件數")
#將【總裝置容量】、【總件數】最大值的兩個點,用箭頭標註出行政區別
for i in ["總裝置容量kwp(萬)","總件數"]:
#篩選最大值的該筆資料並重設索引
filter = (data[i]==data[i].max())
data_arrow = data[filter].reset_index()
#建立箭頭的座標與所屬行政區別的變數
data_arrow_x =data_arrow["總裝置容量kwp(萬)"][0]
data_arrow_y =data_arrow["總件數"][0]
data_arrow_text = data_arrow["行政區別"][0]
#箭頭設定函數
ax0.annotate(
#設定顯示文字
text=data_arrow_text,
#設定箭頭的頭的座標
xy=(data_arrow_x,data_arrow_y),
#設定顯示文字的座標
xytext=(data_arrow_x-15,data_arrow_y),
#設定箭頭相關屬性
arrowprops=dict(
arrowstyle = "->",
color = "darkblue",
)
)
#設定圖例
ax0.legend()
#設定子圖標題
ax0.set_title("台南太陽光電業務資訊")
plt.tight_layout()