Python绘制Tree Map

什么是Tree Map?

树状图(Treemap),是用于展现有群组、层次关系的比例数据的一种分析工具,它通过矩形的面积、排列和颜色来显示复杂的数据关系,并具有群组、层级关系展现功能,能够直观体现同级之间的比较。

树状图由马里兰大学教授Ben Shneiderman于上个世纪90年代提出,起初是为了找到一种有效了解磁盘空间使用情况的方法(引自知乎上叶小烨的回答)。

Python实现

例如我们利用Tree Map来绘制某些关键科学问题在期刊中出现的频次,如机器学习方法在地下水位埋深中的预测在不同期刊中出现的频次,以下是示例数据。

import matplotlib.pyplot as plt
import squarify

# 示例数据,\n是换行,由于字太长出了矩形框做了换行处理
categories = ["Journal of Hydrology", "Geocarto International", "Water",
              "Science of the\n Total Environment", "Water\n Resources\n Research",
              "Agricultural\n Water\n Management"]
values = [19, 14, 7, 6, 4, 4]

# 颜色映射,你可以根据需要修改
color = [0.1, 0.5, 0.9, 0.3, 0.7, 0.2]

plt.figure(figsize=(8, 6))  # 通过设置 figsize 调整图形大小

# 绘制 Tree Map,size是矩形的大小,根据值来绘制不同的大小
squarify.plot(sizes=values, label=categories, color=plt.cm.Paired(color), alpha=0.7
              , text_kwargs={'fontsize': 12})

# 设置标题
plt.title("Tree Map")

# 隐藏坐标轴
plt.axis('off')

# 显示图形
plt.show()

结果展示:
在这里插入图片描述
如果想要设置亚组也是可以的,即一个大类(主要组)中包含多个小类(亚组)。
代码展示,以下是示例数据:

import plotly.express as px

# 示例数据框
data = dict(
    main_group=["Group1", "Group1", "Group1", "Group1", "Group2", "Group2", "Group3"],
    sub_group=["SubgroupA1", "SubgroupA2", "SubgroupA3", "SubgroupA4", "SubgroupB1", "SubgroupB2", "SubgroupC"],
    value=[5, 5, 10, 5, 8, 12, 20]
)

# 创建Tree Map图
fig = px.treemap(
    data,
    path=['main_group', 'sub_group'],  # 指定数据的层次结构
    values='value',
    title='Tree Map with Subgroups',
    color='main_group',  # 使用主要组列作为颜色
    color_discrete_map={'Group1': 'lightblue', 'Group2': 'lightpink',
                        'Group3': 'lightgreen'},  # 自定义颜色映射
)

# 设置标签字体大小
fig.update_layout(
    font=dict(size=20)
)

# 显示图形
fig.show()

结果展示:

在这里插入图片描述

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
根据提供的引用内容,我们可以看到Python与太极文化的结合为我们提供了一个思考和创造的平台,既能够提升编程技能,又能够深入了解和传播太极文化的价值。那么,Python如何与传统文化相结合呢?以下是一些例子: 1. 使用Python绘制太极图案 ```python import turtle # 设置布大小 turtle.setup(600, 600) # 设置笔颜色和大小 turtle.pensize(5) turtle.pencolor('black') # 绘制黑色半圆 turtle.fillcolor('black') turtle.begin_fill() turtle.circle(200, 180) turtle.end_fill() # 绘制白色半圆 turtle.fillcolor('white') turtle.begin_fill() turtle.circle(200, -180) turtle.end_fill() # 绘制两个小圆 turtle.pencolor('black') turtle.fillcolor('black') turtle.penup() turtle.goto(-60, 80) turtle.pendown() turtle.begin_fill() turtle.circle(30) turtle.end_fill() turtle.penup() turtle.goto(60, -80) turtle.pendown() turtle.begin_fill() turtle.circle(30) turtle.end_fill() # 隐藏笔 turtle.hideturtle() # 显示绘制结果 turtle.done() ``` 2. 使用Python实现太极八卦 ```python import turtle # 设置布大小 turtle.setup(600, 600) # 设置笔颜色和大小 turtle.pensize(5) turtle.pencolor('black') # 绘制黑色半圆 turtle.fillcolor('black') turtle.begin_fill() turtle.circle(200, 180) turtle.end_fill() # 绘制白色半圆 turtle.fillcolor('white') turtle.begin_fill() turtle.circle(200, -180) turtle.end_fill() # 绘制两个小圆 turtle.pencolor('black') turtle.fillcolor('black') turtle.penup() turtle.goto(-60, 80) turtle.pendown() turtle.begin_fill() turtle.circle(30) turtle.end_fill() turtle.penup() turtle.goto(60, -80) turtle.pendown() turtle.begin_fill() turtle.circle(30) turtle.end_fill() # 绘制八卦图案 turtle.pencolor('black') turtle.penup() turtle.goto(0, 0) turtle.pendown() turtle.circle(200, -45) turtle.circle(100, -135) turtle.circle(-100, -135) turtle.circle(-200, -45) # 隐藏笔 turtle.hideturtle() # 显示绘制结果 turtle.done() ``` 3. 使用Python实现太极拳动作识别 ```python import numpy as np import pandas as pd from sklearn.model_selection import train_test_split from sklearn.tree import DecisionTreeClassifier from sklearn.metrics import accuracy_score # 读取数据集 data = pd.read_csv('taichi.csv') # 将标签转换为数字 data['label'] = data['label'].map({'A': 0, 'B': 1}) # 划分训练集和测试集 X_train, X_test, y_train, y_test = train_test_split(data.iloc[:, :-1], data.iloc[:, -1], test_size=0.2, random_state=42) # 训练决策树模型 clf = DecisionTreeClassifier(random_state=42) clf.fit(X_train, y_train) # 预测测试集 y_pred = clf.predict(X_test) # 计算准确率 accuracy = accuracy_score(y_test, y_pred) print('Accuracy:', accuracy) ```
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

彭博锐

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值