GT.data_color()
可以讓我們依據表格值來套用背景顏色。
以下我們將使用內建的exibble
dataset所生成的df
DataFrame,來作為本日說明的範例:
import polars as pl
from great_tables import GT
from great_tables.data import exibble
df = pl.from_pandas(exibble)
shape: (8, 9)
┌──────────┬────────────┬───────┬────────────┬───┬──────────┬───────┬───────┐
│ num ┆ char ┆ fctr ┆ date ┆ … ┆ currency ┆ row ┆ group │
│ --- ┆ --- ┆ --- ┆ --- ┆ ┆ --- ┆ --- ┆ --- │
│ f64 ┆ str ┆ str ┆ str ┆ ┆ f64 ┆ str ┆ str │
╞══════════╪════════════╪═══════╪════════════╪═══╪══════════╪═══════╪═══════╡
│ 0.1111 ┆ apricot ┆ one ┆ 2015-01-15 ┆ … ┆ 49.95 ┆ row_1 ┆ grp_a │
│ 2.222 ┆ banana ┆ two ┆ 2015-02-15 ┆ … ┆ 17.95 ┆ row_2 ┆ grp_a │
│ 33.33 ┆ coconut ┆ three ┆ 2015-03-15 ┆ … ┆ 1.39 ┆ row_3 ┆ grp_a │
│ 444.4 ┆ durian ┆ four ┆ 2015-04-15 ┆ … ┆ 65100.0 ┆ row_4 ┆ grp_a │
│ 5550.0 ┆ null ┆ five ┆ 2015-05-15 ┆ … ┆ 1325.81 ┆ row_5 ┆ grp_b │
│ null ┆ fig ┆ six ┆ 2015-06-15 ┆ … ┆ 13.255 ┆ row_6 ┆ grp_b │
│ 777000.0 ┆ grapefruit ┆ seven ┆ null ┆ … ┆ null ┆ row_7 ┆ grp_b │
│ 8.88e6 ┆ honeydew ┆ eight ┆ 2015-08-15 ┆ … ┆ 0.44 ┆ row_8 ┆ grp_b │
└──────────┴────────────┴───────┴────────────┴───┴──────────┴───────┴───────┘
GT.data_color()
GT.data_color(self, columns=None, rows=None, palette=None, domain=None, na_color=None, alpha=None, reverse=False, autocolor_text=True)
GT.data_color()是一個威力強大的功能,但它需要仰賴使用者細心地調整參數,如果您直接使用預設的GT.data_color()
至表格的話,版面一般都會過於雜亂。例如:
(GT(df).data_color())
因此,正確的GT.data_color()
使用方式應該是針對不同欄位各自給定適合的參數。此外,由上可以觀察出來,GT.data_color()
不僅可以作用在數值型別的欄位,也可以作用在str
型別的欄位。
下面我們展示針對「"row"」欄位,使用palette
參數來指定喜愛的背景顏色風格:
(GT(df).data_color(columns="row", palette="Blues"))
palette
參數共有數十種選項,可以參考官方文件來挑選。
此外,palette
參數也支援傳入一個list
,裡面可以包含多種顏色,gt
依此產生漸層效果。例如:
(
GT(df).data_color(
columns="row", palette=["rebeccapurple", "white", "orange"]
)
)
對於數值型別欄位,我們可以透過指定domain
參數來控制其背景顏色。例如這裡我們針對「"num"」欄位,指定domain
參數範圍為0~5600:
(GT(df).data_color(columns="num", palette="Oranges", domain=[0, 5600]))
如果不在此0~5600範圍的行將會顯示na_color
參數所設定的顏色(預設為「"#808080"」)。
當然您也可以主動設定na_color
參數為想要的顏色,例如指定為「"lightgreen"」:
(
GT(df).data_color(
columns="num",
palette="Oranges",
domain=[0, 5600],
na_color="lightgreen",
)
)
如果有多個欄位需要調整的話,可以多次呼叫GT.data_color()
。例如針對「"num"」欄位及「"currency"」欄位分別使用適合的參數來呼叫GT.data_color()
:
(
GT(df)
.data_color(
columns="num",
palette="Oranges",
domain=[0, 5600],
na_color="lightgreen",
)
.data_color(
columns="currency",
palette="Purples",
domain=[0, 50],
na_color="lightgreen",
)
)
最後別忘了rows
參數可以指定想顯示的行數。例如指定rows
參數為「"currency"」欄位中小於50的行數:
(
GT(df).data_color(
columns="currency",
rows=pl.col("currency").lt(50),
palette="Purples",
domain=[0, 50], # not influenced by `rows`
na_color="lightgreen",
)
)
這邊需留意,GT.data_color()
的顏色計算是根據所有行數而來,並不會因為給定rows
參數後,而僅選取部份行數來計算顏色。rows
參數的功用只是在顏色計算完成後,指定想顯示的行數。