QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 7793|回复: 0
打印 上一主题 下一主题

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

[复制链接]
字体大小: 正常 放大
杨利霞        

5273

主题

82

听众

17万

积分

  • TA的每日心情
    开心
    2021-8-11 17:59
  • 签到天数: 17 天

    [LV.4]偶尔看看III

    网络挑战赛参赛者

    网络挑战赛参赛者

    自我介绍
    本人女,毕业于内蒙古科技大学,担任文职专业,毕业专业英语。

    群组2018美赛大象算法课程

    群组2018美赛护航培训课程

    群组2019年 数学中国站长建

    群组2019年数据分析师课程

    群组2018年大象老师国赛优

    跳转到指定楼层
    1#
    发表于 2020-5-30 15:09 |只看该作者 |正序浏览
    |招呼Ta 关注Ta

    9 r4 k: F( x# f7 W) C1 e) f! vpython+matplotlib绘制南丁格尔玫瑰图6 [* f5 _0 {% Y$ f
    实验:绘制南丁格尔玫瑰图
    ! X$ t4 e$ j# S7 `  本实验有一定难度,有人说matplotlib绘图和matlab大同小异,我看除了一些函数名相同之外,其他的像参数和使用方法很不一样.另外我不知道是不是在matlab中画玫瑰图直接一个"肉丝"函数就成了,为什么matplotlib里面没有~~
    9 u6 [# T/ ], M- z4 t, v9 N: O  无论如何还是感谢本次实验,虽然费了点时间但是我对函数画图有了一定深度的了解和掌握,草草在python之matplotlib库重要绘图函数简介里面记录了一下,因为内容太多没有一一写成博文,但是附加了一些别人博客的链接,还是很有帮助的.
    5 w+ T& ^( V  Y$ z0 c# e4 o) R& d5 i  V; N+ s# H
    文章目录# g! f6 `- h* n& k0 j7 ~' A! Z

    & ?6 `; Y% w5 T" _' }6 B  s$ B, y) J( {一、实验目的
    . W" _, P2 u& @/ z6 k9 ?1 L* n二、实验内容
    ( n- r* h/ p+ t  i  k0 w三、实验环境
    6 ~7 X" z* D3 l0 K- Q四、实验步骤
    & |* e' @1 L  d4 `3 j) j' ?五、实验代码及测试% f: L0 M+ Y6 }" M. |
    1.源代码, ?$ c5 k8 t- ~9 _7 y2 G
    2.运行结果1 j$ Y1 V" V! v$ Z+ r, }( c/ O
    3.excel数据表* L$ Y: a, c% z
    一、实验目的
    4 V# \- x. K- d4 b; U' ?5 U4 \( P( E" |# k9 K- A: c4 Q' s
      了解玫瑰图的前世今生;了解matplotlib标准库中的pyplot模块;了解在极坐标系中绘制柱状图。- X- {) l, D( K9 Z4 a) }& C
    0 i7 N! j3 u- u8 H( y1 O
    二、实验内容- p! Y3 ?' W& s+ }7 ^6 ^1 ]
    8 k" g7 I3 o! o* {
      南丁格尔玫瑰图(Nightingale rose diagram)又名鸡冠花图(Coxcomb Chart)或极坐标区域图(Polar area diagram)。它将柱图转化为更美观饼图形式,是极坐标化的柱图。不同于饼图用角度表现数值或占比,南丁格尔玫瑰图使用扇形的半径表示数据的大小,各扇形的角度则保持一致。
    ( Z$ k9 a& t" t6 j/ e2 C) U- o6 `  自行选择一组数据,画出基础玫瑰图。
    & r, y5 d4 P! C+ ?- Q) ?) g# @  i8 ^& S! ]: }5 Y+ `
    三、实验环境
    8 u' w4 O, c4 C0 @0 H' k: [
    0 R% I1 a# ]' P% W5 @' U8 \  m3 b9 [  ython 3.8
    , U. E3 V! B7 b9 k' d! B- k" J1 E. E; n
    四、实验步骤) {2 ]) m( t3 c  b% V/ ^, Z5 X' |. L
      L5 p* e0 A1 }# z# q) ^
    查阅文档,了解南丁格尔玫瑰图的原理。6 b) G  d5 b3 X8 d: y& H/ o; f
    选择一组数据,编写程序画出玫瑰图。( y! K! c+ {6 L, R" H
    五、实验代码及测试8 H( K# _- i* e& X% S2 W

    7 f7 @( q$ T8 g, |) O1.源代码
    % T9 F. A6 ]; Z. A. a4 K- d$ `6 N: d; j) d
    import matplotlib.pyplot as plt
    4 {( ]1 K# W3 n8 v' v9 kimport numpy as np
    " \1 r. r3 n& a, N0 a1 V, r+ V( d: }import xlrd2 n+ j& y) N8 r4 B/ I

    * v  U1 n- {& y8 x0 Y! R0 f'''
    - [% m5 b$ C" e. q- `0 l, \    按列读取excel文件并存入两个列表
    " r/ G- S0 c0 q6 @5 n7 C  t" {% j'''
    - n* L2 W" Q4 Q8 y/ c% m- Cdata=xlrd.open_workbook(r'亚洲国家疫情数据.xlsx') ' H$ z* y& B3 `
    table  = data.sheets()[0]   #通过索引顺序获取工作表
    # c* I3 a) H6 Ycols_n = table.ncols
    2 L8 H$ J, _' ]5 Z# `- ycountry_list = table.col_values(0,start_rowx=1) # start_rowx默认为0,设置为1去掉列名, ]% j( @4 V* ]9 Y: K( w$ T+ ]! f
    data_list = table.col_values(1,start_rowx=1): r" N# s$ V: y0 U6 b% S. H& O4 j$ J* ]
    # print(data_list)# r; K! P! ~6 F/ N2 S

    # G3 ~4 L7 I* G'''
    ) c  l8 P; H" Z    计算角度2 y# H, H2 f5 Z6 X& d# A. \
    '''
    & a; H* l4 O3 D  u: I4 T7 M: M; f0 {& Xn = table.nrows-1           #去掉列名
    ; ]8 m8 a+ |" e* M8 @. `# X  Ktheta = np.linspace(0,2*np.pi,len(data_list))    # 360度等分成n份
    6 U' D5 N9 |" N
    / k5 |4 k& Q. r# ]' \'''
    7 o, w0 L8 U. B+ {& f# D0 b    作图3 g& C  s% E& X- w4 N
    '''
    $ O1 z1 V1 \/ ]$ H# 设置画布
    2 @4 ?7 K% Q8 i- I0 Dfig = plt.figure(figsize=(12,10)), m' t- ^1 v7 x; r8 [! ]
    # 极坐标( @4 m# R5 h( k9 L
    ax = plt.subplot(111,projection = 'polar')
    " D; O5 Y' H. q5 n# x& A0 \& b0 [# 顺时针并设置N方向为0度; c  }- b5 W8 R: D3 c
    ax.set_theta_direction(-1)
    7 [, L3 u/ w/ iax.set_theta_zero_location('N')
    - o; b# j/ r& ]3 g& H/ ]& s0 e/ x9 w4 g) m
    # 在极坐标中画柱形图
    / Z: D$ V! s  e# P  }ax.bar(theta,
    4 M; J  h. n+ w) J& W        data_list,
    , @. E$ j3 X" f9 U$ v) k/ ~- w        width = 0.33,
    ' `5 d) g4 ~& t5 V3 G  `2 X- `3 ^        color = np.random.random((len(data_list),3)),
    1 A% M! u3 `( e3 I) Y        # labels=str(country_list), 3 C/ i9 m, \3 w
            align = 'edge')9 x0 ?# s8 p  L. ]
    '''
    $ ~( r, r& J" M: N    显示一些简单的中文图例/ H- L: T; j5 \2 D# t7 M5 G9 ], a
    '''
    1 T4 X3 t+ Q: B5 x1 X9 eplt.rcParams['font.sans-serif']=['SimHei']  # 黑体
    8 M8 q, P& ?4 @  j+ T1 q+ b" ~ax.set_title('亚洲国家现存确诊',fontdict={'fontsize':20})
    * M- ?4 x( }# L! e* V+ ]: l( Ofor angle,data in zip(theta,data_list):
    - j5 F1 P1 R, d7 `    ax.text(angle+0.03,data+100,str(data))
    8 {$ d) _" W5 g0 e% B3 O+ x# g# a% `' c1 ~0 N8 [; p
      _: C" K$ [* ~( o8 l- \% R
    plt.axis('off')
    5 v# a. w0 R+ m1 q) E& N# B  y) B+ [) q. i0 ]% K
    plt.savefig('Nightingale_rose.png')$ P2 T8 m3 C2 ~8 f1 |" Y$ d
    plt.show(), n% l& ^/ M# H5 z& x1 e' C# ^
    7 R# D) y  e, V0 `1 p$ j% U. H
    % J! l5 {; A: k
    2.运行结果2 v  W. Y( t/ q( f7 F
    1.png 5 D) m) r3 r/ z' p
    ; a9 Q* Q6 q) s% `
    ( ]( o1 _& R8 j' f/ y9 F
    3.excel数据表
    4 X; c% A1 t) m+ X4 U. F 2.png
    $ u0 B  V. Z2 q8 [3 r5 \* i. }0 K  _0 |% ^0 ]# b2 O  Q
    4.说明
    0 ^. n( p2 e' x/ F% Y3 n; {  四位数过长,而对应的图所占比例很小,所以在图上的标注有些重叠./ e+ N5 X& D1 u0 E; W
      实验让画出基础玫瑰图,并没有图例和标签的要求,而且给玫瑰图设置标签的步骤比较繁琐,所以没有涉及到.
    - s7 \8 u7 ]# M* W————————————————1 f3 ^9 h& B% G: I4 K, q
    版权声明:本文为CSDN博主「小兰同学」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。) I7 S* ]# k+ ?# v) w
    原文链接:https://blog.csdn.net/weixin_42323041/article/details/1062638526 c! s8 U" t6 S& N( w; O) ]

    7 c! {$ G; @: n- Z# H
    2 Z9 z6 u1 m. s. }' }. H, Y
    zan
    转播转播0 分享淘帖0 分享分享0 收藏收藏0 支持支持0 反对反对0 微信微信
    您需要登录后才可以回帖 登录 | 注册地址

    qq
    收缩
    • 电话咨询

    • 04714969085
    fastpost

    关于我们| 联系我们| 诚征英才| 对外合作| 产品服务| QQ

    手机版|Archiver| |繁體中文 手机客户端  

    蒙公网安备 15010502000194号

    Powered by Discuz! X2.5   © 2001-2013 数学建模网-数学中国 ( 蒙ICP备14002410号-3 蒙BBS备-0002号 )     论坛法律顾问:王兆丰

    GMT+8, 2026-6-8 13:10 , Processed in 0.522426 second(s), 54 queries .

    回顶部