python+matplotlib绘制南丁格尔玫瑰图

实验:绘制南丁格尔玫瑰图
  本实验有一定难度,有人说matplotlib绘图和matlab大同小异,我看除了一些函数名相同之外,其他的像参数和使用方法很不一样.另外我不知道是不是在matlab中画玫瑰图直接一个"肉丝"函数就成了,为什么matplotlib里面没有~~
  无论如何还是感谢本次实验,虽然费了点时间但是我对函数画图有了一定深度的了解和掌握,草草在python之matplotlib库重要绘图函数简介里面记录了一下,因为内容太多没有一一写成博文,但是附加了一些别人博客的链接,还是很有帮助的.

一、实验目的

  了解玫瑰图的前世今生;了解matplotlib标准库中的pyplot模块;了解在极坐标系中绘制柱状图。

二、实验内容

  南丁格尔玫瑰图(Nightingale rose diagram)又名鸡冠花图(Coxcomb Chart)或极坐标区域图(Polar area diagram)。它将柱图转化为更美观饼图形式,是极坐标化的柱图。不同于饼图用角度表现数值或占比,南丁格尔玫瑰图使用扇形的半径表示数据的大小,各扇形的角度则保持一致。
  自行选择一组数据,画出基础玫瑰图。

三、实验环境

  Python 3.8

四、实验步骤

  1. 查阅文档,了解南丁格尔玫瑰图的原理。
  2. 选择一组数据,编写程序画出玫瑰图。

五、实验代码及测试

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.说明
  四位数过长,而对应的图所占比例很小,所以在图上的标注有些重叠.
  实验让画出基础玫瑰图,并没有图例和标签的要求,而且给玫瑰图设置标签的步骤比较繁琐,所以没有涉及到.

  • 14
    点赞
  • 63
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值