数据图 | 不完美复现极坐标堆叠柱状图 (Python+PPT)
来自:幸会🍊
前言

图片最终效果
极坐标柱状图,也被称为风玫瑰图,相较于柱状图和折线图,可以更直观地展示数据的时间序列变化趋势。极坐标堆叠柱状图在极坐标柱状图的基础上将单列数据扩展至多列数据,因此,这张图适用于展示递增或递减的多列数据,不适用于骤增骤减的数据--可能会被遮挡。实现时有两个思路,第一种是将直角坐标堆叠图替换成极坐标,第二种是将极坐标柱状图扩展成极坐标堆叠柱状图。这里使用的是第二种。
本文的github仓库:Visulization/Polar barplot at main · EricJin73/Visulization (github.com)

原图
第一步 使用Python绘制原图
1. 导入库,设置字体
import numpy as np
import matplotlib.pyplot as plt
import pandas as pd
plt.rcParams["font.size"] = 14
plt.rcParams["font.sans-serif"] = 'Times New Roman'
plt.rcParams["font.weight"] = 'bold'
2. 导入数据
数据格式如下,选择的是逐年递增数据。

数据格式
#%% Data input
data = pd.read_excel(r'data_example.xlsx')
3. 转换至极坐标,设置柱子宽度,透明度。
#%% Convert to polar coodinates
N = 12
enddata = 2*np.pi
theta = np.linspace(0, enddata, N, endpoint=False)
radii_a = data['a']
radii_b = data['b']
radii_c = data['c']
width = enddata / N
alpha = 1
#colors = plt.cm.viridis_r(radii / 36)
4. 绘图
分别绘制3个柱状图。颜色不知道的话可以使用PPT的颜色吸取器。
#%% Draw
fig = plt.figure(figsize=(6,6))
ax = plt.subplot(111, projection='polar')
bars_c = ax.bar(theta, radii_c, width=width, bottom=0.0, color='#0051A3', alpha=alpha, edgecolor='#0051A3', label='c')
bars_b = ax.bar(theta, radii_b, width=width, bottom=0.0, color='#0191C6', alpha=alpha, edgecolor='#0191C6', label='b')
bars_a = ax.bar(theta, radii_a, width=width, bottom=0.0, color='#67BFC1', alpha=alpha, edgecolor='#67BFC1', label='a')
5. 移除网格
#%% Remove grids
ax.spines['polar'].set_visible(False)
ax.set_xticklabels([])
ax.set_yticklabels([])
ax.grid(False)
6. 方向设置
包括0值的初始位置和顺时针和逆时针的设置。
#%% Set direction
ax.set_theta_zero_location('N')
ax.set_theta_direction(-1)
7. 设置图例
#%% Set legend
ax.legend(loc='upper right', frameon=True, edgecolor='black')
8. 图片输出
#%% Picture output
plt.tight_layout()
plt.show()
输出效果

Python 输出效果
第二步 使用PPT调整细节
由于这段Python代码还无法做到直接导出原图效果,还需要用PPT进行调整。暂时未解决的问题包括0值的初始位置设置,极坐标只能设置8个方向;以及比例尺的设置。如果有知道的小伙伴可以在评论区指出。因此PPT需要解决这两个问题(CAD和Adobe Illustrator等同样可以实现)。第一个问题用旋转指令即可解决。第二个问题,配合PPT的标尺加上直线功能即可实现。最终效果如下:

最终效果
参考:
还没人转发这篇讨论
最新讨论 ( 更多 )
- Q&A|请问这种图用什么工具实现呢 (momo)
- 其他|在逛哈组的时候发现一个科研绘图的网站 (momo)
- Q&A|请问这种桑基图是用什么软件画的呢? (拓跋令狐🌙)
- Q&A|想知道这种流程图是用啥画的 (威士忌的碎冰)
- Q&A|请问像这种配色可以用python画出来吗 (tren)