2024-08-23|閱讀時間 ‧ 約 9 分鐘

如何用Python繪製彩色表格

首先這是我們的資料

raw-image

首先我們可以先最簡單的用plottable將圖表轉成圖檔

import pandas as pd

data = pd.read_csv("第14任總統副總統選舉鳥松區開票統計結果.csv")

import matplotlib

matplotlib.rc("font",family="Microsoft Yahei")

from matplotlib import pyplot as plt
from plottable import ColumnDefinition, Table

#設定圖表大小
plt.figure(figsize=(24,12))

#設定子圖位置
ax0 = plt.subplot2grid((1,1),(0,0))

#基礎圖表
tab = Table(data,ax=ax0)

接著我們可以設定不同的屬性,客製化想輸出的表格

from matplotlib.colors import LinearSegmentedColormap
from plottable.cmap import normed_cmap
from plottable.plots import progress_donut
from plottable import cell

#設定熱力圖資訊
cmap_DPP = LinearSegmentedColormap.from_list(name="DPP",colors=["#99FF99", "#66FF66", "#00DD00", "#008800"], N=data["蔡英文、陳建仁"].max())
cmap_KMT = LinearSegmentedColormap.from_list(name="KMT",colors=["#CCDDFF", "#5599FF", "#0066FF", "#003C9D"], N=data["朱立倫、王如玄"].max())
cmap_PFP = LinearSegmentedColormap.from_list(name="PFP",colors=["#FFDDAA", "#FFBB66", "#FFAA33", "#FF8800"], N=data["宋楚瑜、徐欣瑩"].max())

#設定圖表大小
plt.figure(figsize=(18,24))
#設定子圖位置
ax0 = plt.subplot2grid((1,1),(0,0))

#基本屬性設定
tab = Table(data, #資料源
ax=ax0, #坐標軸對象
columns = ["村里別","投票所別","朱立倫、王如玄","蔡英文、陳建仁","宋楚瑜、徐欣瑩","有效票數","無效票數","投票數","選舉人數","投票率"], #選擇欄位(默認為使用所有columns)
footer_divider = True, #表格最下方是否顯示分隔線
row_dividers = True, #是否顯示各row分隔線
even_row_color="lightgray", #偶數欄顏色
odd_row_color="white", #奇數欄顏色
textprops = {"ha":"center","color":"k"}, #針對所有文字做屬性調整
column_border_kw={"linewidth": 1, "linestyle": "-","color":"gray"}, #針對設定的border的線作屬性調整
column_definitions = [
ColumnDefinition(name="index",textprops={"ha":"left","color":"gray"},border="right"), #針對各別欄位做調整
ColumnDefinition(name="朱立倫、王如玄",group="參選人",formatter=lambda x:str(x)+"票",border="left",cmap=cmap_KMT), #設定欄位名稱群組、文字格式、邊界、熱力圖
ColumnDefinition(name="蔡英文、陳建仁",group="參選人",formatter=lambda x:str(x)+"票",cmap=cmap_DPP),
ColumnDefinition(name="宋楚瑜、徐欣瑩",group="參選人",formatter=lambda x:str(x)+"票",border="right",cmap=cmap_PFP),
ColumnDefinition(name="選舉人數",border="left"),
ColumnDefinition(name="投票率",textprops={"ha":"center"},plot_fn=progress_donut,plot_kw={"is_pct":False,"formatter":"{:.0%}","radius":0.475,"color":"palevioletred"},border="left") #甜甜圈圖
]+
[
ColumnDefinition(name= i ,textprops={"ha":"center"},group="票數狀況")
for i in ["有效票數","無效票數","投票數"]
]
)

#設定欄位值得顏色
tab.columns["選舉人數"].set_fontcolor("palevioletred")

#設定當選舉人數<1000該行標紅
for i in data["選舉人數"].index:
if data["選舉人數"][i]<1000:
tab.rows[i].set_color("plum")

#儲存圖表為圖檔
plt.savefig("圖表.png")



分享至
成為作者繼續創作的動力吧!
© 2024 vocus All rights reserved.