一、实验目的
了解玫瑰图的前世今生;了解 matplotlib 标准库中的 pyplot 模块;了解在极坐标
系中绘制柱状图。
二、实验基本原理及步骤(或方案设计及理论计算)
实验步骤:
- 查阅文档,了解南丁格尔玫瑰图的原理。
- 选择一组数据,比如新型冠状病毒肺炎相关数据,或者中国各个省份面积或人口
数据等等,编写程序画出玫瑰图。
import numpy as np
import matplotlib.pyplot as plt
import pandas as pd
plt.rcParams['font.sans-serif'] = ['SimHei'] # 中文显示
# 中国各省面积
# shuju={'acreade':['新疆','西藏','内蒙古','青海','四川'],'value':[166,122.8,118.3,72.23,48.14]}
shuju = {'acreade': ['福建', '辽宁', '河北', '安徽', '广东', '山东', '陕西', '广西'],
'value': [12.13, 14.59, 18.77, 13.97, 18, 15.38, 20.56, 23.6]}
pdat = pd.DataFrame(shuju)
# print(pdat)
# 角度
l = pdat['value']
print(l)
N = pdat.shape[0] # 总数
width = 2 * np.pi / N
rad = np.cumsum([width] * N) # 每个扇形的起始角度
# color
# colors = ['darkgoldenrod', 'goldenrod', 'orange', 'gold', 'yellow']
colors = ['blue', 'orange', 'brown', 'green', 'pink', 'blueviolet', 'turquoise', 'tomato']
plt.figure(figsize=(6, 8)) # 创建画布
ax = plt.subplot(projection='polar')
# 删除不必要的内容
ax.set_ylim(-4, np.ceil(l.max() + 1)) # 中间空白
ax.set_theta_zero_location('N') # 设置极坐标的起点(即0度)在正上方向
ax.grid(False) # 不显示极轴
ax.spines['polar'].set_visible(False) # 不显示极坐标最外的圆形
ax.set_yticks([]) # 不显示坐标间隔
ax.set_thetagrids([]) # 不显示极轴坐标
# 绘画
ax.bar(rad, l, width=width, color=colors, alpha=1)
ax.bar(rad, 5, width=width, color='white', alpha=0.3) # 中间添加白色色彩使图案变浅
ax.bar(rad, 8, width=width, color='white', alpha=0.2) # 中间添加白色色彩使图案变浅
# text
for i in np.arange(N):
ax.text(rad[i], # 角度
l[i] + 1, # 长度
shuju['acreade'][i], # 文本
rotation=rad[i] * 180 / np.pi, # 文字角度
rotation_mode='anchor', # this parameter is a trick
alpha=1,
fontweight='bold', size=12
)
plt.show()