最近github上发现了一个库(plottable
),能够用简略的形式就设置出花哨的 DataFrame
款式。
github上的地址:https://github.com/znstrider/plottable
1. 装置
通过 pip
装置:
pip install plottable
2. 行的色彩
应用 plottable
的API,调整背景和字体的色彩十分不便。
2.1. 奇偶行不同色彩
奇偶行设置不同的色彩,让表格看起来有层次感。
import numpy as npfrom plottable import Tabledata = np.random.random((5, 5))data = data.round(2)df = pd.DataFrame(data, columns=["A", "B", "C", "D", "E"])tbl = Table(df, odd_row_color="#f0f0f0", even_row_color="#e0f6ff" )
2.2. 背景和字体色彩
对于简单的显示要求,能够逐行设置背景色和字体的色彩。
import numpy as npfrom plottable import Tabledata = np.random.random((5, 5))data = data.round(2)df = pd.DataFrame(data, columns=["A", "B", "C", "D", "E"])tbl = Table(df)tbl.rows[0].set_facecolor("red")tbl.rows[0].set_fontcolor("white")tbl.rows[1].set_facecolor("blue")tbl.rows[1].set_fontcolor("white")tbl.rows[2].set_facecolor("green")tbl.rows[2].set_fontcolor("white")tbl.rows[3].set_facecolor("gray")tbl.rows[3].set_fontcolor("white")tbl.rows[4].set_facecolor("purple")tbl.rows[4].set_fontcolor("white")
上例中每一行的背景设置了不同的色彩,字体都设置为红色。
3. 值的显示
调整色彩,字体属于根本的设置,plottable
弱小之处在于可用图形化的形式来显示数据,
让咱们能够一眼看出数据的大小和差距。
比方,上面的示例用 ColumnDefinition
来应用 plottable
内置的数据显示方式。
import numpy as npfrom matplotlib.colors import LinearSegmentedColormapfrom plottable import ColumnDefinition, Tablefrom plottable.formatters import decimal_to_percentfrom plottable.plots import bar, percentile_bars, percentile_stars, progress_donutdata = np.random.random((5, 5))data = data.round(2)df = pd.DataFrame(data, columns=["A", "B", "C", "D", "E"])print(df) # 显示原始数据cmap = LinearSegmentedColormap.from_list( name="bugw", colors=["#ffffff", "#f2fbd2", "#c9ecb4", "#93d3ab", "#35b0ab"], N=256)tab = Table( df, textprops={"ha": "center"}, column_definitions=[ ColumnDefinition("index", textprops={"ha": "left"}), ColumnDefinition("A", plot_fn=percentile_bars, plot_kw={"is_pct": True}), ColumnDefinition( "B", width=1.5, plot_fn=percentile_stars, plot_kw={"is_pct": True} ), ColumnDefinition( "C", plot_fn=progress_donut, plot_kw={"is_pct": True, "formatter": "{:.0%}"}, ), ColumnDefinition( "D", width=1.25, plot_fn=bar, plot_kw={ "cmap": cmap, "plot_bg_bar": True, "annotate": True, "height": 0.5, "lw": 0.5, "formatter": decimal_to_percent, }, ), ],)
原始数据显示:
plottable
强化之后显示:
4. 图文混合
最初,演示一个通过 plottable
在表格中插入图片的示例。
其中数据起源是 2023 王者光荣秋季赛各个战队的数据。
次要为了演示表格中插入图片(图片是各个战队的logo),所以只筛选了4个列来展现。
import pandas as pdimport numpy as npimport matplotlibimport matplotlib.pyplot as pltfrom matplotlib.colors import LinearSegmentedColormapfrom plottable import ColumnDefinition, Tablefrom plottable.formatters import decimal_to_percentfrom plottable.plots import bar, percentile_bars, percentile_stars, progress_donutfrom plottable.plots import circled_imagematplotlib.rcParams["font.sans-serif"] = ["Microsoft YaHei Mono"]matplotlib.rcParams["axes.unicode_minus"] = Falsedf = pd.read_csv("d:/share/data.csv")df = df.set_index("排名")df["胜率"] = df["胜场"] / df["较量场次"]df["logo"] = "d:/share/wzry-logos/" + df["战队"] + ".png"df = df.drop(columns=["胜场", "较量场次", "场均KDA"])fig, ax = plt.subplots(figsize=(12, 12))col_defs = [ ColumnDefinition("排名", textprops={"ha": "left"}), ColumnDefinition( name="logo", title="", textprops={"ha": "center"}, width=0.5, plot_fn=circled_image, ), ColumnDefinition("战队", textprops={"ha": "center"}), ColumnDefinition( "胜率", plot_fn=progress_donut, plot_kw={"is_pct": True, "formatter": "{:.0%}"}, ), ]tbl = Table( df, ax=ax, textprops={"ha": "center", "fontsize": 20}, column_definitions=col_defs,)
下面示例中用到的数据和logo图标分享在:
https://url11.ctfile.com/f/45455611-870642180-a094e4?p=6872 (拜访明码: 6872)
有趣味能够试试看下面的示例,或者持续深刻摸索 plottable
的弱小显示性能。
本文由mdnice多平台公布