实验:绘制南丁格尔玫瑰图
本实验有一定难度,有人说matplotlib绘图和matlab大同小异,我看除了一些函数名相同之外,其他的像参数和使用方法很不一样.另外我不知道是不是在matlab中画玫瑰图直接一个"肉丝"函数就成了,为什么matplotlib里面没有~~
无论如何还是感谢本次实验,虽然费了点时间但是我对函数画图有了一定深度的了解和掌握,草草在python之matplotlib库重要绘图函数简介里面记录了一下
文章目录
- 一、实验目的
- 二、实验内容
- 三、实验环境
- 四、实验步骤
- 五、实验代码及测试
- 1.源代码
- 2.运行结果
- 3.excel数据表
一、实验目的
了解玫瑰图的前世今生;了解matplotlib标准库中的pyplot模块;了解在极坐标系中绘制柱状图。
二、实验内容
南丁格尔玫瑰图(Nightingale rose diagram)又名鸡冠花图(Coxcomb Chart)或极坐标区域图(Polar area diagram)。它将柱图转化为更美观饼图形式,是极坐标化的柱图。不同于饼图用角度表现数值或占比,南丁格尔玫瑰图使用扇形的半径表示数据的大小,各扇形的角度则保持一致。
自行选择一组数据,画出基础玫瑰图。
三、实验环境
Python 3.8
四、实验步骤
- 查阅文档,了解南丁格尔玫瑰图的原理。
- 选择一组数据,编写程序画出玫瑰图。
五、实验代码及测试
1.源代码
import matplotlib.pyplot as plt
import numpy as np
import xlrd
'''
按列读取excel文件并存入两个列表
'''
data=xlrd.open_workbook(r'亚洲国家疫情数据.xlsx')
table = data.sheets()[0] #通过索引顺序获取工作表
cols_n = table.ncols
country_list = table.col_values(0,start_rowx=1) # start_rowx默认为0,设置为1去掉列名
data_list = table.col_values(1,start_rowx=1)
# print(data_list)
'''
计算角度
'''
n = table.nrows-1 #去掉列名
theta = np.linspace(0,2*np.pi,len(data_list)) # 360度等分成n份
'''
作图
'''
# 设置画布
fig = plt.figure(figsize=(12,10))
# 极坐标
ax = plt.subplot(111,projection = 'polar')
# 顺时针并设置N方向为0度
ax.set_theta_direction(-1)
ax.set_theta_zero_location('N')
# 在极坐标中画柱形图
ax.bar(theta,
data_list,
width = 0.33,
color = np.random.random((len(data_list),3)),
# labels=str(country_list),
align = 'edge')
'''
显示一些简单的中文图例
'''
plt.rcParams['font.sans-serif']=['SimHei'] # 黑体
ax.set_title('亚洲国家现存确诊',fontdict={'fontsize':20})
for angle,data in zip(theta,data_list):
ax.text(angle+0.03,data+100,str(data))
plt.axis('off')
plt.savefig('Nightingale_rose.png')
plt.show()
2.运行结果
3.excel数据表
4.说明
四位数过长,而对应的图所占比例很小,所以在图上的标注有些重叠.
实验让画出基础玫瑰图,并没有图例和标签的要求,而且给玫瑰图设置标签的步骤比较繁琐,所以没有涉及到.