- 在线时间
- 1630 小时
- 最后登录
- 2024-1-29
- 注册时间
- 2017-5-16
- 听众数
- 82
- 收听数
- 1
- 能力
- 120 分
- 体力
- 563395 点
- 威望
- 12 点
- 阅读权限
- 255
- 积分
- 174241
- 相册
- 1
- 日志
- 0
- 记录
- 0
- 帖子
- 5313
- 主题
- 5273
- 精华
- 3
- 分享
- 0
- 好友
- 163
TA的每日心情 | 开心 2021-8-11 17:59 |
|---|
签到天数: 17 天 [LV.4]偶尔看看III 网络挑战赛参赛者 网络挑战赛参赛者 - 自我介绍
- 本人女,毕业于内蒙古科技大学,担任文职专业,毕业专业英语。
 群组: 2018美赛大象算法课程 群组: 2018美赛护航培训课程 群组: 2019年 数学中国站长建 群组: 2019年数据分析师课程 群组: 2018年大象老师国赛优 |
" Q" b" _, c# h! O
python+matplotlib绘制南丁格尔玫瑰图2 K& C. y) j+ w( X/ l
实验:绘制南丁格尔玫瑰图
5 ]$ c0 a6 X* @, R4 Z7 \ 本实验有一定难度,有人说matplotlib绘图和matlab大同小异,我看除了一些函数名相同之外,其他的像参数和使用方法很不一样.另外我不知道是不是在matlab中画玫瑰图直接一个"肉丝"函数就成了,为什么matplotlib里面没有~~
: a0 i1 P! I: o; H! O* _) P 无论如何还是感谢本次实验,虽然费了点时间但是我对函数画图有了一定深度的了解和掌握,草草在python之matplotlib库重要绘图函数简介里面记录了一下,因为内容太多没有一一写成博文,但是附加了一些别人博客的链接,还是很有帮助的.
, q( A6 {- J, R7 w
, {- J2 U& R, L8 B! H文章目录
" s9 w5 B1 E+ H. K: w4 d* ?5 ^' D$ j7 [2 E0 L! q
一、实验目的
/ v O; o7 I' E0 [' V二、实验内容
8 W1 T! {; e, C8 v4 @三、实验环境" K- }$ q& o. R4 j3 k# Q* s8 \9 h
四、实验步骤* q h4 E' f0 q- ?$ n9 P. _
五、实验代码及测试$ r, O# W/ x4 Q; Q0 b; p I+ d5 C* w N
1.源代码- z3 m7 E9 ~3 N. l6 Q. [
2.运行结果
3 M k% k5 q' D( M+ T$ }, g3.excel数据表
( I6 X* G+ ?6 c& V* t9 n$ [6 e一、实验目的
/ Z7 _6 n0 t6 g" X8 F L: r/ D- O( U$ V# F' F+ y$ J
了解玫瑰图的前世今生;了解matplotlib标准库中的pyplot模块;了解在极坐标系中绘制柱状图。; A( k& O8 ~6 w0 E
" o7 g8 O. [/ P二、实验内容
1 P/ {& S' ]: O! w( B: E$ t9 E$ y4 X) _/ r- B
南丁格尔玫瑰图(Nightingale rose diagram)又名鸡冠花图(Coxcomb Chart)或极坐标区域图(Polar area diagram)。它将柱图转化为更美观饼图形式,是极坐标化的柱图。不同于饼图用角度表现数值或占比,南丁格尔玫瑰图使用扇形的半径表示数据的大小,各扇形的角度则保持一致。% x8 O- I& `, d, K) w! M
自行选择一组数据,画出基础玫瑰图。
5 q+ C/ F/ J$ D9 X
r: t" k+ X6 i; x三、实验环境: x7 s9 F5 \* E; `: V
9 p, V. m9 ^# L# I5 u' d- o5 M8 q
ython 3.8
+ y9 z" I0 v: q8 H' ^
7 j9 D x% t ^6 h$ g, `5 u( }四、实验步骤
7 [+ J$ q3 V+ T9 ^: J! r$ E' w. c
9 p. O- P0 g+ c. R" c1 h# |; R查阅文档,了解南丁格尔玫瑰图的原理。
6 i! b/ b; h+ n9 A8 G/ B5 F选择一组数据,编写程序画出玫瑰图。! u+ B+ M6 i' n8 i2 B, V
五、实验代码及测试
( Q, |: w( T+ @2 I1 _* T, m
8 u Q4 A& i0 z' q1.源代码0 E6 K& V( G+ E% I) t! S, U
- R J4 Q: G; e! Timport matplotlib.pyplot as plt2 p Y* p; i6 s0 E" m
import numpy as np
- e! W/ ~/ J/ p5 O) w$ \) s- Pimport xlrd
6 K* N. g6 ?" ^! e6 `4 r
' V' `! Z: [6 P; ]'''
. y1 |/ \# }5 k9 p+ b& S [ 按列读取excel文件并存入两个列表/ J! D/ N" N% p/ d1 V8 v; `% o9 ~* t
'''; d/ s3 {, ?# u/ L5 ~4 S& N- i; B% o
data=xlrd.open_workbook(r'亚洲国家疫情数据.xlsx')
% F3 o! `+ W9 L2 e4 F' t$ i3 @2 t, ntable = data.sheets()[0] #通过索引顺序获取工作表, w( Z& K2 J$ _3 o3 b
cols_n = table.ncols & l: S) d3 t/ q G; d- a2 r# m3 ^0 @6 a
country_list = table.col_values(0,start_rowx=1) # start_rowx默认为0,设置为1去掉列名! V) N7 R1 U5 r
data_list = table.col_values(1,start_rowx=1)
5 m' ^6 Q2 \- T) a# |# print(data_list)
. |$ W6 Q5 K- }! `& Y$ @: Y6 ~, k# a! u3 k4 [3 v
'''% `6 L4 e1 P" g1 C( Q* ?$ ~
计算角度& s( I2 b I# J! D5 o! a
'''
- U$ J+ y: _* O% A6 d4 e, dn = table.nrows-1 #去掉列名
' d. t g- h1 e Q! |5 @4 [theta = np.linspace(0,2*np.pi,len(data_list)) # 360度等分成n份
: _0 F8 q0 B( N+ `! T3 S/ L: L1 w1 r( V% c* Y1 }
'''( J* w% o, ?5 C! V$ {. z0 S V
作图- P2 E: D+ E# s0 r! Z# f1 X
'''4 } E% h$ N Y7 ]
# 设置画布1 r; E6 s# W$ J4 |0 ?9 P' @
fig = plt.figure(figsize=(12,10))5 Q3 R+ C# D$ m% B! x( d
# 极坐标, U9 r% i8 V/ e5 {( ]3 |& u
ax = plt.subplot(111,projection = 'polar'). t% t, R$ B' \& N8 q. Y
# 顺时针并设置N方向为0度
% H( p8 q6 |' N1 D3 xax.set_theta_direction(-1)! e+ f2 h% L- q7 w9 A
ax.set_theta_zero_location('N')
+ q# _. n9 @) a7 n9 b% D+ R; @6 h x
8 v! j x% b% P" h# 在极坐标中画柱形图
+ I" F# I5 e' [5 cax.bar(theta,
1 N5 T- u# O2 a0 i- t! Y. G- q. z data_list,
0 z( N1 T6 C o9 V/ ~$ _/ k/ W9 c width = 0.33,
* W/ A3 K$ W* G# M color = np.random.random((len(data_list),3)),& K) p: i. H$ m8 F: D8 |
# labels=str(country_list), 0 G# F4 ~7 u. I' m- }6 _8 @" X& ?8 I
align = 'edge')
4 v/ q! F; Y( d+ P8 ?''' Y1 F3 Y% e6 T% C1 C
显示一些简单的中文图例# X; Q8 D$ Y/ _0 k& ~5 w
'''" @- r( k! t1 }3 A J
plt.rcParams['font.sans-serif']=['SimHei'] # 黑体
3 X# x) X8 r0 s1 D# e {$ f) M) aax.set_title('亚洲国家现存确诊',fontdict={'fontsize':20})
8 B8 l1 g8 d w# ~. K- F1 _; D2 K6 vfor angle,data in zip(theta,data_list):/ B) i; m/ F7 w; Z, L/ O
ax.text(angle+0.03,data+100,str(data)) : [0 m# b; @) x7 J; g O
! \$ ^5 F& i1 {. R0 a5 [6 L
. d6 ?1 N8 E/ x J
plt.axis('off')" J4 {4 z1 [2 C: _6 m
( M/ b% k- v2 F: Aplt.savefig('Nightingale_rose.png') f, i2 v! k# s6 L' A# Q
plt.show()' B# W# |7 J, ] t
& f" Q7 j( S7 y+ f5 W, L6 O: F
9 l3 _$ b% [. C8 o* U0 z- S
2.运行结果
$ v# J+ P' c: x2 P# I( _
+ e6 u$ i: a, P" T8 d3 [" g' v# ?$ `- E* k' d( j3 c& o) g# T
9 @% U6 I$ t* Y! k/ W% R4 [3.excel数据表- \& R0 h0 x9 o. z$ K0 I
. [ Z B. e3 s! u7 f5 u/ Z
* c# j5 x* s& R& e2 [
4.说明+ Q$ P1 R# a, j' a5 Q n* w" z
四位数过长,而对应的图所占比例很小,所以在图上的标注有些重叠.
- v( {" o6 P* F( ` 实验让画出基础玫瑰图,并没有图例和标签的要求,而且给玫瑰图设置标签的步骤比较繁琐,所以没有涉及到.7 L5 v S$ ]* l1 X' x1 X5 ?& |0 V
————————————————
! c' }& {& b2 R+ D2 H/ |版权声明:本文为CSDN博主「小兰同学」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。& K; A1 A7 o, o- N; c" }3 q
原文链接:https://blog.csdn.net/weixin_42323041/article/details/106263852
4 I) h2 n, D' A z0 T( K: u6 o& L3 E- I
( }3 p$ r* a3 r: d* b0 t6 Q |
zan
|