首页 > 编程语言 >Python实现表格可视化

Python实现表格可视化

时间:2024-11-20 09:49:48浏览次数:3  
标签:group name 表格 Python cols df cmap 可视化 ColumnDefinition

今天给大家分享一个Python工具——plottable,可以轻松制作高质量、个性化的表格,底层为Matplotlib。

例如以下两种表格形式:

现在奉上完整代码给大家:

# 导入相关包
from pathlib import Path

import matplotlib
import matplotlib.pyplot as plt
import numpy as np
import pandas as pd
from matplotlib.colors import LinearSegmentedColormap

from plottable import ColumnDefinition, Table
from plottable.cmap import normed_cmap
from plottable.formatters import decimal_to_percent
from plottable.plots import circled_image

plt.rcParams["font.family"] = ["DejaVu Sans"]
plt.rcParams["savefig.bbox"] = "tight"

# demo数据准备
cols = [
    "team",
    "points",
    "group",
    "spi",
    "global_o",
    "global_d",
    "group_1",
    "group_2",
    "group_3",
    "make_round_of_16",
    "make_quarters",
    "make_semis",
    "make_final",
    "win_league",
]

df = pd.read_csv(
    "data/wwc_forecasts.csv",
    usecols=cols,
)

colnames = [
    "Team",
    "Points",
    "Group",
    "SPI",
    "OFF",
    "DEF",
    "1st Place",
    "2nd Place",
    "3rd Place",
    "Make Rd Of 16",
    "Make Quarters",
    "Make Semis",
    "Make Finals",
    "Win World Cup",
]

col_to_name = dict(zip(cols, colnames))

flag_paths = list(Path("country_flags").glob("*.png"))
country_to_flagpath = {p.stem: p for p in flag_paths}

df[["spi", "global_o", "global_d"]] = df[["spi", "global_o",
                                          "global_d"]].round(1)

df = df.rename(col_to_name, axis=1)
df = df.drop("Points", axis=1)
df.insert(0, "Flag", df["Team"].apply(lambda x: country_to_flagpath.get(x)))

df = df.set_index("Team")

# colormap准备
cmap = LinearSegmentedColormap.from_list(
    name="bugw",
    colors=["#ffffff", "#f2fbd2", "#c9ecb4", "#93d3ab", "#35b0ab"],
    N=256)

team_rating_cols = ["SPI", "OFF", "DEF"]
group_stage_cols = ["1st Place", "2nd Place", "3rd Place"]
knockout_stage_cols = list(df.columns[-5:])

# table列个性化list,例如列名、列宽、字体、磅值等等
col_defs = ([
    ColumnDefinition(
        name="Flag",
        title="Region",
        textprops={"ha": "center"},
        width=0.5,
        plot_fn=circled_image,
    ),
    ColumnDefinition(
        name="Team",
        textprops={
            "ha": "left",
            "weight": "bold"
        },
        width=1.5,
    ),
    ColumnDefinition(
        name="Group",
        textprops={"ha": "center"},
        width=0.75,
    ),
    ColumnDefinition(
        name="SPI",
        group="Team Rating",
        textprops={"ha": "center"},
        width=0.75,
    ),
    ColumnDefinition(
        name="OFF",
        width=0.75,
        textprops={
            "ha": "center",
            "bbox": {
                "boxstyle": "circle",
                "pad": 0.35
            },
        },
        cmap=normed_cmap(df["OFF"], cmap=matplotlib.cm.Blues, num_stds=2.5),
        group="Team Rating",
    ),
    ColumnDefinition(
        name="DEF",
        width=0.75,
        textprops={
            "ha": "center",
            "bbox": {
                "boxstyle": "circle",
                "pad": 0.35
            },
        },
        cmap=normed_cmap(df["DEF"], cmap=matplotlib.cm.Greens, num_stds=2.5),
        group="Team Rating",
    ),
] + [
    ColumnDefinition(
        name=group_stage_cols[0],
        title=group_stage_cols[0].replace(" ", "\n", 1),
        formatter=decimal_to_percent,
        group="Group Stage Chances",
        border="left",
    )
] + [
    ColumnDefinition(
        name=col,
        title=col.replace(" ", "\n", 1),
        formatter=decimal_to_percent,
        group="Group Stage Chances",
    ) for col in group_stage_cols[1:]
] + [
    ColumnDefinition(
        name=knockout_stage_cols[0],
        title=knockout_stage_cols[0].replace(" ", "\n", 1),
        formatter=decimal_to_percent,
        cmap=cmap,
        group="Knockout Stage Chances",
        border="left",
    )
] + [
    ColumnDefinition(
        name=col,
        title=col.replace(" ", "\n", 1),
        formatter=decimal_to_percent,
        cmap=cmap,
        group="Knockout Stage Chances",
    ) for col in knockout_stage_cols[1:]
])

# plottable的Table方法制作表格

fig, ax = plt.subplots(figsize=(20, 22))
table = Table(
    df,
    column_definitions=col_defs,
    row_dividers=True,
    footer_divider=True,
    ax=ax,
    textprops={
        "fontsize": 14
    },
    row_divider_kw={
        "linewidth": 1,
        "linestyle": (0, (1, 5))
    },
    col_label_divider_kw={
        "linewidth": 1,
        "linestyle": "-"
    },
    column_border_kw={
        "linewidth": 1,
        "linestyle": "-"
    },
).autoset_fontcolors(colnames=["OFF", "DEF"])

 了解更多Python、计算机知识,了解更多优惠活动、一起学习交流!

标签:group,name,表格,Python,cols,df,cmap,可视化,ColumnDefinition
From: https://blog.csdn.net/WANGWUSAN66/article/details/143903030

相关文章

  • Python 人工智能项目的五大实战技巧
    技巧一:数据预处理的重要性理论讲解:数据是机器学习的基础,而数据预处理则是确保模型性能的关键步骤。常见的数据预处理技术包括数据清洗、缺失值处理、特征缩放和编码等。通过这些步骤,可以提高模型的准确性和泛化能力。代码示例:importpandasaspdfromsklearn.preprocess......
  • Python 自学教程
    python下载安装9-python官网:https://www.python.org/12进去网址后点击: 10 11-下载好后 12-添加环境变量     记得双击安装:三、pycharm上配置python13-双击桌面pycharm随便取个名字(我取的学习),直接点击create.遇到如下......
  • Python 进行性能优化方法
    1.使用内置函数Python提供了许多高效的内置函数,这些函数通常比自定义函数更快。例如,sum()、max() 和 min() 等。#使用内置函数sum()计算列表的总和numbers=[1,2,3,4,5]total=sum(numbers)print(total)#输出:152.列表推导式列表推导式是一种简洁高......
  • 使用wxpython开发跨平台桌面应用,设计系统的登录界面
    一般的系统登统界面,设计好看一些,系统会增色不少,而常规的桌面程序,包括Web上的很多界面,都借助于背景图片的效果来增色添彩,本篇随笔介绍基于WxPython来做一个登录界面效果,并对系统登录界面在不同系统上(WIndows和MacOS)进行测试对比,调整最佳的处理方案。1、登录界面的设计如前面所......
  • 软件测试笔记|Python自动化测试|常见的列表相关函数有哪些?
    VX公众Hao:阳哥整理软件测试笔记正文:以下是一些常见的Python列表相关函数:增删操作相关函数•list.append():在列表末尾添加一个元素。例如,my_list=[1,2];my_list.append(3),此时my_list变为[1,2,3]。•list.extend():用于将一个可迭代对象(如列表、元组等)中的元素逐个......
  • 软件测试笔记|Python自动化测试|常见的字典相关函数有哪些?
    VX公众Hao:阳哥整理软件测试笔记正文:以下是一些常见的Python字典相关函数:增删改操作相关函数•dict.update():用于将一个字典的键值对更新到另一个字典中。如果键已存在,就更新对应的值;如果键不存在,就添加新的键值对。•dict.pop():通过指定键来删除字典中的键值对,并返回被......
  • Open3D Python版本快速安装和使用
    目录一、什么是Open3D二、Python版本快速安装和使用三、测试代码四、结果展示一、什么是Open3DOpen3D是一个开源库,支持快速开发和处理3D数据。Open3D在c++和Python中公开了一组精心选择的数据结构和算法。后端是高度优化的,并且是为并行化而设置的。其核心特性......
  • OpenCV-Python Shi-Tomasi 角点检测 & 适合于跟踪的图像特征
    原理上一节我们学习了Harris角点检测,后来1994年,J.Shi和C.Tomasi在他们的文章《Good_Features_to_Track》中对这个算法做了一个小小的修改,并得到了更好的结果。我们知道Harris角点检测的打分公式为:R=\lambda_1\lambda_2-k(\lambda_1+\lambda_2)^2但Shi-......
  • OpenCV-Python Harris 角点检测
    原理在上一节我们已经知道了角点的一个特性:向任何方向移动变化都很大。Chris_Harris和Mike_Stephens早在1988年的文章《ACombinedCornerandEdgeDetector》中就已经提出了焦点检测的方法,被称为Harris角点检测。他把这个简单的想法转换成了数学形式。将窗口向......
  • MATLAB实现基于SVD奇异值分解的信号分解分量可视化
    目录项目背景介绍...1项目目标与意义...1项目挑战...2项目特点与创新...2项目应用领域...2项目效果预测图程序设计...3项目模型架构...3项目模型描述...5项目结构设计...6项目部署与应用...6项目扩展...7项目应该注意事项...7项目未来改进方向...7......