- 在线时间
- 1630 小时
- 最后登录
- 2024-1-29
- 注册时间
- 2017-5-16
- 听众数
- 82
- 收听数
- 1
- 能力
- 120 分
- 体力
- 563404 点
- 威望
- 12 点
- 阅读权限
- 255
- 积分
- 174244
- 相册
- 1
- 日志
- 0
- 记录
- 0
- 帖子
- 5313
- 主题
- 5273
- 精华
- 3
- 分享
- 0
- 好友
- 163
TA的每日心情 | 开心 2021-8-11 17:59 |
|---|
签到天数: 17 天 [LV.4]偶尔看看III 网络挑战赛参赛者 网络挑战赛参赛者 - 自我介绍
- 本人女,毕业于内蒙古科技大学,担任文职专业,毕业专业英语。
 群组: 2018美赛大象算法课程 群组: 2018美赛护航培训课程 群组: 2019年 数学中国站长建 群组: 2019年数据分析师课程 群组: 2018年大象老师国赛优 |
, h4 Y) p6 C, i( J/ ]python+matplotlib绘制南丁格尔玫瑰图
8 j5 L3 w+ ?. b2 `实验:绘制南丁格尔玫瑰图
$ Y/ l' c5 y5 h4 U 本实验有一定难度,有人说matplotlib绘图和matlab大同小异,我看除了一些函数名相同之外,其他的像参数和使用方法很不一样.另外我不知道是不是在matlab中画玫瑰图直接一个"肉丝"函数就成了,为什么matplotlib里面没有~~+ _' g1 O" s$ k5 n* F* n
无论如何还是感谢本次实验,虽然费了点时间但是我对函数画图有了一定深度的了解和掌握,草草在python之matplotlib库重要绘图函数简介里面记录了一下,因为内容太多没有一一写成博文,但是附加了一些别人博客的链接,还是很有帮助的.
0 |3 ^6 f+ T- h9 m) N
8 m! A" ?& K+ \/ D2 M/ {8 P文章目录
. x, g- r, H6 n A( _9 \+ }( b3 S2 N" |! {5 a: a, p" h
一、实验目的
2 H% F( ^( g0 F% ^! i二、实验内容
n3 f( }4 G. T' o+ n三、实验环境
- U, G I, T4 S/ K四、实验步骤
3 C! B* i% d" T6 @0 C( O; Y* R五、实验代码及测试) D+ g6 ~3 q X4 A8 m% E) l4 u
1.源代码
# R% a h+ V: V- s0 f4 Y: S9 ^2.运行结果
) c( j3 o& u$ U6 c4 T: n9 m3.excel数据表
g0 U% z5 D& V" i# [一、实验目的
- j, R( O2 Y( q8 G0 q
$ ~# g, ]) c4 o# X4 c2 J 了解玫瑰图的前世今生;了解matplotlib标准库中的pyplot模块;了解在极坐标系中绘制柱状图。8 I2 g8 @! P/ v( V% x% R
2 r0 P! s8 W8 J. b. s9 p/ T' v二、实验内容" l* T M/ N. d" s/ H
' Z1 @* U, I9 M: T" p
南丁格尔玫瑰图(Nightingale rose diagram)又名鸡冠花图(Coxcomb Chart)或极坐标区域图(Polar area diagram)。它将柱图转化为更美观饼图形式,是极坐标化的柱图。不同于饼图用角度表现数值或占比,南丁格尔玫瑰图使用扇形的半径表示数据的大小,各扇形的角度则保持一致。
! W# u6 ~ E/ a* s9 @ 自行选择一组数据,画出基础玫瑰图。# U, m& K* J" h8 r" b
. c: T$ }4 k+ b, G: Y9 |
三、实验环境) A5 ?6 h5 M8 D& r9 U0 n) B
7 i+ @- J' u5 w! [( i. K ython 3.8) o: V @, ~- `( X3 k
, p1 M0 [/ i* u7 ~4 \' q' E8 n v, O
四、实验步骤
* v' m% Z7 @1 v o. ?6 [" G3 `* i- ~* H. w$ T, N5 L% w0 J3 q8 C d3 E
查阅文档,了解南丁格尔玫瑰图的原理。
5 v: p `8 C9 c$ T7 u- Q选择一组数据,编写程序画出玫瑰图。( ?( S b+ D; m3 X# w" _6 Q
五、实验代码及测试0 }7 ~* Z, H. ]$ m
: x, B* L6 K6 E' ]+ a+ n/ |9 C
1.源代码
& Y% b& J/ e+ ` D z* N r, J$ ?
/ n% j6 E( ]2 r) N! uimport matplotlib.pyplot as plt! [9 h$ ?/ f& Z# p$ m3 |+ u: D
import numpy as np
6 T. C; V! q J. k' ` A7 E# vimport xlrd
1 C& F7 P, J, U4 G
9 O- Z6 J% o! l" {'''
3 ~3 |- p# \! R; y8 v, U 按列读取excel文件并存入两个列表
$ u' k1 z6 ]+ K& ~' ~' r'''
h" g, e j, b; ]$ Cdata=xlrd.open_workbook(r'亚洲国家疫情数据.xlsx')
2 v; o9 S9 G7 |% \table = data.sheets()[0] #通过索引顺序获取工作表
3 m, W' {4 \8 o" y: S+ S V, u5 F+ Icols_n = table.ncols
$ ~' I6 Y, ]0 Z: c* ccountry_list = table.col_values(0,start_rowx=1) # start_rowx默认为0,设置为1去掉列名
$ q/ F: T {7 wdata_list = table.col_values(1,start_rowx=1)( y: F% N) @9 l
# print(data_list)6 R+ V7 F' m' ^8 Q, B* k5 a3 ? g
6 H* `4 X2 W2 M9 ^
'''
% D4 ]) l. {- h) }" @8 I 计算角度
# J. z7 |# K' |- \) e8 J''', a4 Y# u% h5 A
n = table.nrows-1 #去掉列名 q0 w! Y! h% t* k3 n7 \2 \4 _
theta = np.linspace(0,2*np.pi,len(data_list)) # 360度等分成n份
k# @% b y" w( ?4 |# ~/ O7 ]! ]+ l4 f% M+ k0 g8 O" ^# v; V
'''+ J* U3 z' `. z0 Q5 \
作图. N b( P! h# T
'''
, K6 l. K0 k1 O8 i# 设置画布& v& J3 Y! N4 t+ s( T. a5 K8 ^
fig = plt.figure(figsize=(12,10))" c) L; \. h4 ]) `3 b
# 极坐标
b' E' v8 c. r, T$ o5 @8 E+ qax = plt.subplot(111,projection = 'polar')
! i P8 @: Z5 E0 Z* }, Y( B# 顺时针并设置N方向为0度
/ W2 u# N' _2 V* |* bax.set_theta_direction(-1)
5 l$ k8 X, X* ]4 Lax.set_theta_zero_location('N')
$ O% y7 w! E. K# n( r2 N
* [' D- Z3 B$ o) b: ~' _6 n# 在极坐标中画柱形图 x9 c' D; J" d. N9 f+ l
ax.bar(theta,: h% J0 f4 H5 r6 U. z
data_list, i4 A8 t1 W, _# R/ c
width = 0.33,! h- Q/ ? c" C- B* d0 s
color = np.random.random((len(data_list),3)),$ H+ D+ A3 c) `$ x
# labels=str(country_list), / T' o& a2 R! r/ q6 s
align = 'edge')
* C/ \$ b; J& p' \'''
: o$ G8 _& U) X, J" e6 }+ A+ V 显示一些简单的中文图例
* k2 w, B" c3 [( O1 N'''$ A4 i. W; N' M" N8 B& i7 A
plt.rcParams['font.sans-serif']=['SimHei'] # 黑体
4 s: ]: T# M8 T3 S/ ~ax.set_title('亚洲国家现存确诊',fontdict={'fontsize':20})
+ k* F6 S0 N8 j) _, v" F: Nfor angle,data in zip(theta,data_list):5 t! p5 U+ C- c( r5 ?% ~
ax.text(angle+0.03,data+100,str(data))
9 q( A2 ^! k% C# a
/ S" u: m: u4 D7 Z
# C9 I7 w# r9 j; [plt.axis('off')
, [9 A; L( U$ q8 E' W7 }% D0 A; J* l Q* v, W9 E3 ?
plt.savefig('Nightingale_rose.png')
; d) a6 [5 m9 R. mplt.show()
1 m+ s v$ o9 ] T+ L4 v
4 m" x7 Q$ T# ]5 H0 t0 N& `% k0 o" R0 o" u( H& n! g" w! l, U7 x5 U
2.运行结果- ?: ~. ~0 U! @
+ ^6 A# h( e9 i6 q6 `
. y$ b+ J' j3 v- r. X! Z% v# a, V- d* d- R1 P
3.excel数据表
- @( ^9 h) c5 l- h
2 @0 N3 E: |* }
! y2 y( a/ h' c) X$ J& Z
4.说明
) t0 O; ^( O! v7 ] 四位数过长,而对应的图所占比例很小,所以在图上的标注有些重叠.( k: U. O/ o8 K
实验让画出基础玫瑰图,并没有图例和标签的要求,而且给玫瑰图设置标签的步骤比较繁琐,所以没有涉及到.
& h9 L4 `& x6 Z0 k, d& f+ r- b! h————————————————
' M4 r8 Z3 Z- Z- k# ^' p* g版权声明:本文为CSDN博主「小兰同学」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。% g0 n( g P. W
原文链接:https://blog.csdn.net/weixin_42323041/article/details/106263852% C5 Y5 l( U1 v: A# ^+ a: T
* J% {3 b, `5 ^3 r4 |6 ^
* s1 U6 K) B: P) C0 c |
zan
|