共计 3338 个字符,预计需要花费 9 分钟才能阅读完成。
最近 github 上发现了一个库(plottable
),能够用简略的形式就设置出花哨的 DataFrame
款式。
github 上的地址:https://github.com/znstrider/plottable
1. 装置
通过 pip
装置:
pip install plottable
2. 行的色彩
应用 plottable
的 API,调整背景和字体的色彩十分不便。
2.1. 奇偶行不同色彩
奇偶行设置不同的色彩,让表格看起来有层次感。
import numpy as np
from plottable import Table
data = 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 np
from plottable import Table
data = 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 np
from matplotlib.colors import LinearSegmentedColormap
from plottable import ColumnDefinition, Table
from plottable.formatters import decimal_to_percent
from plottable.plots import bar, percentile_bars, percentile_stars, progress_donut
data = 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 pd
import numpy as np
import matplotlib
import matplotlib.pyplot as plt
from matplotlib.colors import LinearSegmentedColormap
from plottable import ColumnDefinition, Table
from plottable.formatters import decimal_to_percent
from plottable.plots import bar, percentile_bars, percentile_stars, progress_donut
from plottable.plots import circled_image
matplotlib.rcParams["font.sans-serif"] = ["Microsoft YaHei Mono"]
matplotlib.rcParams["axes.unicode_minus"] = False
df = 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 多平台公布
正文完