看论文的时候,经常看到描述数据集的时候,做的这种图
感觉挺不错的,美观也好看
今天没事,就用python做了一个类似的
如图所示:
可能看起来比较简陋,但是基本格式大差不差,用的时候调整调整配色,字体,以及标签显示位置,即可
我暂时不用,所以先放一个代码在这,需要用的时候可以改改,里面的参数都是可以改的
代码如下:
import matplotlib.pyplot as plt
import numpy as npdef draw_radial_bar_chart(categories, values, inner_radius=0.5, line_width=1, bar_colors=None):"""绘制环形柱状图Author:1900Blog address:https://blog.csdn.net/holly_Z_P_F?spm=1001.2101.3001.5343参数:categories : list类别名称列表values : list每个类别的值列表inner_radius : float, 可选中间圆形的半径,默认为0.5line_width : float, 可选中间圆形分割线的粗细,默认为1bar_colors : list, 可选柱状图的颜色列表,默认为None(自动使用默认颜色)"""# 设置中文字体plt.rcParams['font.sans-serif'] = ['SimHei'] # 指定默认字体为黑体plt.rcParams['axes.unicode_minus'] = False # 解决保存图像是负号'-'显示为方块的问题# 创建图形和极坐标轴fig, ax = plt.subplots(figsize=(10, 8), subplot_kw=dict(polar=True), facecolor='white') # 设置背景为白色# 绘制中间白色圆形ax.bar(0, inner_radius, width=np.pi * 2, color='white', alpha=1.0)# 绘制柱状图theta = np.linspace(0, 2 * np.pi, len(categories), endpoint=False)width = 2 * np.pi / len(categories)# 如果没有指定柱状图颜色,则使用默认颜色if bar_colors is None:bar_colors = ['red', 'blue', 'green', 'orange', 'purple', 'pink', 'brown', 'cyan'][:len(categories)]# 为了确保颜色数量足够,如果不足则循环使用if len(bar_colors) < len(categories):bar_colors = bar_colors * ((len(categories) // len(bar_colors)) + 1)bar_colors = bar_colors[:len(categories)]# 绘制柱状图并添加标签for i in range(len(categories)):# 绘制中间圆形的分割线,颜色跟随柱状图颜色start_theta = theta[i] - width / 2ax.plot([start_theta, start_theta], [0, inner_radius], color=bar_colors[i], linewidth=line_width)bars = ax.bar(theta, values, width=width, color=bar_colors, alpha=0.7, bottom=inner_radius)# 添加标签for i, (bar, category) in enumerate(zip(bars, categories)):# 计算标签位置(柱状图高度的一半)label_y = inner_radius + bar.get_height() / 2rotation = theta[i] * 180 / np.pi - 90ax.text(theta[i], label_y, category, ha='center', va='center', rotation=rotation)# 设置图表属性plt.title('环形柱状图', fontsize=16)ax.set_rlim(0, max(values) + inner_radius + 5) # 设置径向范围,以便标签可以显示完整ax.grid(False) # 关闭网格线# 隐藏角度刻度和极坐标刻度ax.set_yticklabels([])ax.set_xticklabels([])# 隐藏最外边的圆形边界ax.spines['polar'].set_visible(False)# 显示图表plt.tight_layout()plt.show()# 数据集
categories = ['类别1', '类别2', '类别3', '类别4', '类别5', '类别6', '类别7', '类别8', '类别9', '类别10', '类别11']
values = [25, 20, 30, 25, 15, 20, 25, 30, 35, 40, 45]# 绘制图表
draw_radial_bar_chart(categories, values, inner_radius=20, line_width=0.5)