环状分组柱状图 Python

news2024/12/25 9:34:31

代码:

import matplotlib.pyplot as plt
import numpy as np


# 数据
np.random.seed(123)
group1 = 100 * np.random.rand(5)
group2 = 100 * np.random.rand(5)
group3 = 100 * np.random.rand(5)
group4 = 100 * np.random.rand(5)

groups = [group1, group2, group3, group4]
group_names = list('ABCD')
group_colors = ['#ff706d', '#7baf06', '#01bfc5', '#cb7bf6']


# 画图
fig = plt.figure(figsize=(8, 8), dpi=300, facecolor='white')
ax = fig.add_subplot(projection='polar')

ax.set_theta_zero_location("N")
ax.set_theta_direction(-1)

radii = [0]
colors = ['white']
for g, c in zip(groups, group_colors):
    radii.extend(g)
    colors.extend([c]*len(g))
    radii.append(0)
    colors.append('white')
radii.pop()
colors.pop()

N = len(radii)
r_lim = 180
scale_lim = 100
scale_major = 20
bottom = 40
theta = np.linspace(0.0, 2 * np.pi, N, endpoint=False)
width = 2 * np.pi / (N + 9)

# 画出柱状图
ax.bar(theta, radii, width=width, bottom=bottom, color=colors)

# 画出刻度
def scale(ax, bottom, scale_lim, theta, width):
    t = np.linspace(theta-width/2, theta+width/2, 6)
    for i in range(int(bottom), int(bottom+scale_lim+scale_major), scale_major):
        ax.plot(t, [i]*6, linewidth=0.25, color='gray', alpha=0.8)

# 画出刻度值
def scale_value(ax, bottom, theta, scale_lim):
    for i in range(int(bottom), int(bottom+scale_lim+scale_major), scale_major):
        ax.text(theta,
                i,
                f'{i-bottom}',
                fontsize=3,
                alpha=0.8,
                va='center',
                ha='center'
                )

s_list = []
g_no = 0
aa = ["OA","AA","K","EA","HA"]
for t, r in zip(theta, radii):
    if r == 0:
        s_list.append(t)
        if t == 0:
            scale_value(ax, bottom, t, scale_lim)
        else:
            scale(ax, bottom, scale_lim, t, width)
    else:
        t2 = np.rad2deg(t)
        # 标出每根柱的名称
        ax.text(t, r + bottom + scale_major*0.6,
                aa[g_no],
                fontsize=3,
                rotation=90-t2 if t < np.pi else 270-t2,
                rotation_mode='anchor',
                va='center',
                ha='left' if t < np.pi else 'right',
                color='black',
                clip_on=False
                )
        if g_no == (len(aa)-1):
            g_no = 0
        else:
            g_no += 1


s_list.append(2 * np.pi)

for i in range(len(s_list)-1):
    t = np.linspace(s_list[i]+width, s_list[i+1]-width, 50)
    ax.plot(t, [bottom-scale_major*0.4]*50, linewidth=0.5, color='black')
    ax.text(s_list[i]+(s_list[i+1]-s_list[i])/2,
            bottom-scale_major*1.2,
            group_names[i],
            va='center',
            ha='center',
            fontsize=4,
            )

ax.set_rlim(0, bottom+scale_lim+scale_major)
ax.axis('off')

plt.show()

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1033420.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

SpringAOP补充-通知获取类型

JoinPoint 是 ProceedingJoinPoint 的父类。 getArgs()是JoinPoint获取原方法返回值的函数。 preceed()是ProceedingJoinPoint获取原方法返回值的函数。

Qt5开发及实例V2.0-第十四章-Qt多国语言国际化

Qt5开发及实例V2.0-第十四章-Qt多国语言国际化 第14章 Qt 5多国语言国际化14.1 基本概念14.1.1 国际化支持的实现14.1.2 翻译工作&#xff1a;“*.qm”文件的生成 14.2 【实例】14.2.1 简单测试14.2.2 选择语言翻译文字 本章相关例程源码下载1.Qt5开发及实例_CH1401.rar 下载2.…

基于Xml方式Bean的配置-命名空间种类

Spring的标签 Spring的xml标签大体上分为两类&#xff0c;一种是默认标签&#xff0c;一种是自定义标签 默认标签&#xff1a;就是不用额外导入其它命名空间约束的标签&#xff0c;例如<bean>标签 标签作用 <beans> 一般作为xml配置根标签&#xff0c;其他标签都是…

如何利用播放器节省20%点播成本

点播成本节省的点其实涉及诸多部分&#xff0c;例如&#xff1a;CDN、转码、存储等&#xff0c;而利用播放器降本却是很多客户比较陌生的部分。火山引擎基于内部支撑抖音集团相关业务的实践&#xff0c;播放器恰恰是成本优化中最重要和最为依赖的部分。 火山引擎的视频团队做了…

基于复旦微的FMQL45T900全国产化ARM开发开发套件(核心板+底板)

TES745D是我司自主研制的一款基于上海复旦微电子FMQL45T900的全国产化ARM核心板&#xff08;模块&#xff09;。该核心板将复旦微的FMQL45T900&#xff08;与XILINX的XC7Z045-2FFG900I兼容&#xff09;的最小系统集成在了一个87*117mm的核心板上&#xff0c;可以作为一个核心模…

JavaWeb开发-08-MySQL(三)

一.多表查询 -- 多表查询: 数据准备 -- 部门管理 create table tb_dept(id int unsigned primary key auto_increment comment 主键ID,name varchar(10) not null unique comment 部门名称,create_time datetime not null comment 创建时间,update_time datetime not null comm…

数据治理-重要图

语境关系图 车轮图 六边形图

LLMs之InternLM:InternLM-20B的简介、安装、使用方法之详细攻略

LLMs之InternLM&#xff1a;InternLM-20B的简介、安装、使用方法之详细攻略 导读&#xff1a;2023年09月20日&#xff0c;由上海人工智能实验室等团队发布了InternLM-20B的大模型。它在OpenCompass提出的5个能力维度上(语言、知识、理解、推理、学科)全面领先于同规模开源模型&…

华为数通方向HCIP-DataCom H12-831题库(单选题:121-140)

第121题 在华为交换机上配置RADIUS服务器模板时,下列选项中哪些参数为可选的配置参数? A、认证服务器地址和端口 B、RADIUS自动探测用户 C、计费服务器地址和端口 D、Shared-key 答案: B 解析: 在华为交换机上配置 radius 服务器模板时,需要配置共享秘钥,认证服务器地址…

保研CS/软件工程/通信问题汇总

机器学习 1.TP、TN、FP、FN、F1 2.机器学习和深度学习的区别和联系 模型复杂性&#xff1a;深度学习是机器学习的一个子领域&#xff0c;其主要区别在于使用深层的神经网络模型。深度学习模型通常包含多个隐层&#xff0c;可以学习更加复杂的特征表示&#xff0c;因此在某些任…

datax同步数据翻倍,.hive-staging 导致的问题分析

一、背景 有同事反馈 Datax 从 Hive 表同步数据到 Mysql 数据翻倍了。通过查看 Datax 任务日志发现&#xff0c;翻倍的原因是多读取了 .hive-staging_xx 开头的文件。接下里就是有关 .hive-staging 的分析。 二、环境 Hive 版本 2.1.1 三、分析 3.1 .hive-staging_hive 产…

2023最新SSL证书在线申请系统源码 | 支持API接口

2023最新SSL证书在线申请系统源码 | 支持API接口 SSL证书保证网络安全的基本保障。向您介绍我们的在线生成SSL证书系统 支持在线生成SSL证书系统&#xff0c;用户登录可在线申请SSL&#xff0c;后台对接ssl证书API接口 测试运行环境&#xff1a;NginxPHP8.0MySQL5.7 源码下…

【计算机网络】图解路由器(二)

本系列包含&#xff1a; 图解路由器&#xff08;一&#xff09;图解路由器&#xff08;二&#xff09; 图解路由器&#xff08;二&#xff09; 21、什么是静态路由&#xff1f;22、什么是动态路由&#xff1f;23、动态路由有哪些类型&#xff1f;24、什么是 RIP &#xff1f;2…

【Spring中的设计模式】

文章目录 Spring中的设计模式1.控制反转(IoC)和依赖注入(DI)2.工厂设计模式3.单例设计模式实现方式Spring中的单例模式 4.代理设计模式代理模式在 AOP 中的应用Spring AOP 和 AspectJ AOP 有什么区别? 5.模板方法6.观察者模式Spring 事件驱动模型中的三种角色事件角色事件监听…

3、ARIMA序列预测Matlab代码、可视化(可做算法对比)

1、文件包中程序均收集、整理、汇总自网络。 2、文件包完整内容&#xff1a; 1&#xff09;【ARIMA-功能函数】仅包含一个ARIMA算法函数&#xff0c;需要调用到自己的程序中使用。 函数部分代码及预览图&#xff1a; function [result] ARIMA_algorithm(data, Periodicity,…

实现YOLOv5封装成函数以供其他程序进行调用

import detect detect.UAPI(source"data/images") 通过在YOLOv5中的detect.py的代码中&#xff0c;对检测函数进行封装&#xff0c;之后其他代码通过已经封装好的函数进行调用&#xff0c;从而实现简单便捷的YOLOv5代码调用。 代码的主要修改部分就是如何detect.py…

pytest之parametrize()实现数据驱动

第一个参数是字符串&#xff0c;多个参数中间用逗号隔开 第二个参数是list,多组数据用元组类型;传三个或更多参数也是这样传。list的每个元素都是一个元组&#xff0c;元组里的每个元素和按参数顺序一一对应 传一个参数 pytest.mark.parametrize(‘参数名’&#xff0c;list)…

《从菜鸟到大师之路 ElasticSearch 篇》

《从菜鸟到大师之路 ElasticSearch 篇》 &#xff08;一&#xff09;&#xff1a;ElasticSearch 基础概念、生态和应用场景 为什么需要学习 ElasticSearch 根据 DB Engine 的排名显示&#xff0c; ElasticSearch 是最受欢迎的 企业级搜索引擎 。下图红色勾选的是我们前面的系…

算法基础之二分查找

原题链接 一 、二分查找中的mid1和mid-1的问题 二分查找中的边界问题处理不好很容易导致死循环和计算错误的问题&#xff0c;以题目 数的范围为例。 题目大意 ​ 二分查找重复数第一次出现的位置和最后一次出现的位置。 数学含义 ​ 第一次位置即 找到 一个长度最大的 >X 区…

[代码解读] A ConvNet for the 2020s

代码地址&#xff1a;https://github.com/facebookresearch/ConvNeXt ConvNeXt/models/convnext.py整体的代码结构如下&#xff1a; 接下来我们一部分一部分来看。 1.Block类&#xff1a; class Block(nn.Module):r""" ConvNeXt Block. There are two equiva…