基于matplotlib和plottable庫繪制精美表格
plottable是一個Python庫,用于在matplotlib中繪制精美定制的圖形表格。plottable的官方倉庫地址為:plottable。本文主要參考其官方文檔,plottable的官方文檔地址為:plottable-doc。plottable安裝命令如下:
pip install plottable
本文所有代碼見:Python-Study-Notes
# jupyter notebook環(huán)境去除warningimport warningswarnings.filterwarnings("ignore")import plottable# 打印plottable版本print('plottable version:', plottable.__version__)# 打印matplotlib版本import matplotlib as pltprint('matplotlib version:', plt.__version__)
plottable version: 0.1.5matplotlib version: 3.5.3
目錄
1 使用說明
1.1 基礎(chǔ)使用
1.2 列的樣式自定義
1.3 行列自定義
2 繪圖實例
2.1 多行樣式設(shè)置
2.2 自定義單元格效果
2.3 熱圖
2.4 女子世界杯預(yù)測數(shù)據(jù)展示
2.5 德甲積分排名榜展示
3 參考
1 使用說明
1.1 基礎(chǔ)使用
下面的代碼展示了一個簡單的圖形表格繪制示例,plottable提供了Table類以創(chuàng)建和展示圖形表格。
import matplotlib.pyplot as pltimport numpy as npimport pandas as pdfrom plottable import Table# 生成一個包含隨機數(shù)據(jù)的表格d = pd.DataFrame(np.random.random((5, 5)), columns=["A", "B", "C", "D", "E"]).round(2)fig, ax = plt.subplots(figsize=(6, 5))# 基于pandas表格數(shù)據(jù)創(chuàng)建和展示圖形表格tab = Table(d)# 保存圖片plt.savefig("table.jpg", dpi=300,bbox_inches='tight')plt.show()
對于plottable的Table類,其構(gòu)造參數(shù)介紹如下:
df: pd.DataFrame, 要顯示為表格的DataFrame對象
ax: mpl.axes.Axes, 繪制表格的坐標(biāo)軸對象,默認為None
index_col: str, DataFrame中的索引列名。默認為None
columns: List[str], 哪些列用于繪圖。為None表示使用所有列
column_definitions: List[ColumnDefinition], 需要設(shè)置樣式列的style定義類,默認為None
textprops: Dict[str, Any], 文本屬性的字典,默認為空字典
cell_kw: Dict[str, Any], 單元格屬性的字典,默認為空字典
col_label_cell_kw: Dict[str, Any], 列標(biāo)簽單元格屬性的字典,默認為空字典
col_label_divider: bool, 是否在列標(biāo)簽下方繪制分隔線,默認為True。
footer_divider: bool, 是否在表格下方繪制分隔線,默認為False。
row_dividers: bool, 是否顯示行分隔線,默認為True
row_divider_kw: Dict[str, Any], 行分隔線屬性的字典,默認為空字典
col_label_divider_kw: Dict[str, Any], 列標(biāo)簽分隔線屬性的字典,默認為空字典
footer_divider_kw: Dict[str, Any], 頁腳分隔線屬性的字典,默認為空字典
column_border_kw: Dict[str, Any], 列邊框?qū)傩缘淖值?,默認為空字典
even_row_color: str | Tuple, 偶數(shù)行單元格的填充顏色,默認為None
odd_row_color: str | Tuple, 奇數(shù)行單元格的填充顏色,默認為None
在這些參數(shù)之中,控制表格繪圖效果的參數(shù)有以下幾類:
column_definitions:列的樣式自定義
textprops:文本的樣樣式自定義
cell_kw:表格單元格的樣式自定義
其他設(shè)置參數(shù)的樣式
在這些參數(shù)中,最重要的參數(shù)是column_definitions,因為column_definitions可以控制幾乎所有的繪圖效果。接下來本文主要對column_definitions的使用進行具體介紹。
1.2 列的樣式自定義
plottable提供了ColumnDefinition類(別名ColDef)來自定義圖形表格的單個列的樣式。ColumnDefinition類的構(gòu)造參數(shù)如下:
name: str,要設(shè)置繪圖效果的列名
title: str = None,用于覆蓋列名的繪圖標(biāo)題
width: float = 1,列的寬度,默認情況下各列的寬度為軸的寬度/列的總數(shù)
textprops: Dict[str, Any] = field(default_factory=dict),提供給每個文本單元格的文本屬性
formatter: Callable = None,用于格式化文本外觀的可調(diào)用函數(shù)
cmap: Callable = None,根據(jù)單元格的值返回顏色的可調(diào)用函數(shù)
text_cmap: Callable = None,根據(jù)單元格的值返回顏色的可調(diào)用函數(shù)
group: str = None,設(shè)置每個組都會在列標(biāo)簽上方顯示的分組列標(biāo)簽
plot_fn: Callable = None,一個可調(diào)用函數(shù),將單元格的值作為輸入,并在每個單元格上創(chuàng)建一個子圖并繪制在其上
要向其傳遞其他參數(shù)plot_kw: Dict[str, Any] = field(default_factory=dict),提供給plot_fn的附加關(guān)鍵字參數(shù)
border: str | List = None,繪制垂直邊界線,可以是"left" / "l"、"right" / "r"或"both"
通過ColumnDefinition類來設(shè)置Table類的column_definitions參數(shù),可以實現(xiàn)不同表格列樣式的效果。如果是同時多個列的繪圖效果,則需要使用[ColumnDefinition,ColumnDefinition]列表的形式。一些使用示例如下
設(shè)置列標(biāo)題和列寬
import matplotlib.pyplot as pltimport numpy as npimport pandas as pdfrom plottable import ColumnDefinition, ColDef, Tabled = pd.DataFrame(np.random.random((5, 5)), columns=["A", "B", "C", "D", "E"]).round(2)fig, ax = plt.subplots(figsize=(6, 5))# name表示設(shè)置哪個列的樣式tab = Table(d, column_definitions=[ColumnDefinition(name="A", title="Title A"),ColumnDefinition(name="D", width=2)])plt.show()
