QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 7729|回复: 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
    % w: O  q( c1 T, d7 N! p
    python+matplotlib绘制南丁格尔玫瑰图
    ) u- V) Z, i5 p+ D实验:绘制南丁格尔玫瑰图0 Q- m: d8 f% Q* A
      本实验有一定难度,有人说matplotlib绘图和matlab大同小异,我看除了一些函数名相同之外,其他的像参数和使用方法很不一样.另外我不知道是不是在matlab中画玫瑰图直接一个"肉丝"函数就成了,为什么matplotlib里面没有~~
    $ Q0 z( Y' C2 Y* W4 x3 B$ T' B, |* L  无论如何还是感谢本次实验,虽然费了点时间但是我对函数画图有了一定深度的了解和掌握,草草在python之matplotlib库重要绘图函数简介里面记录了一下,因为内容太多没有一一写成博文,但是附加了一些别人博客的链接,还是很有帮助的.
    8 _& `0 W  c. P4 j/ a# `; K  G2 F* S8 r+ d/ ~, y* E
    文章目录
    & Z  w# C1 j, E5 M% b
    " i/ @/ l$ ]! z( ~4 W' E$ S一、实验目的8 a6 J6 D$ V* B' ~6 ]
    二、实验内容  \+ `! f) }& I
    三、实验环境
    # p* J3 o" a/ q四、实验步骤
    2 k. m8 c( t% z五、实验代码及测试# S5 E/ F1 N" m/ a2 w
    1.源代码
    0 `+ p6 N2 u- f+ Y* l8 n7 P, a2.运行结果
    5 E" W: X5 D# I8 n% c$ |$ @# T0 |3.excel数据表. z) x5 w7 I% K
    一、实验目的) p  L( O* k1 Z6 Q! }2 f$ y% r
    3 o7 h* j6 {, Z+ V
      了解玫瑰图的前世今生;了解matplotlib标准库中的pyplot模块;了解在极坐标系中绘制柱状图。+ _; [& U& L- |* h8 q1 T* m
    9 W) f, K: Q8 E- e4 [% S
    二、实验内容
    $ Z) [2 m8 u  U" b/ m  |; Y& {. K/ c; w9 A% L- x, C% H' N& _
      南丁格尔玫瑰图(Nightingale rose diagram)又名鸡冠花图(Coxcomb Chart)或极坐标区域图(Polar area diagram)。它将柱图转化为更美观饼图形式,是极坐标化的柱图。不同于饼图用角度表现数值或占比,南丁格尔玫瑰图使用扇形的半径表示数据的大小,各扇形的角度则保持一致。5 v  B" z5 Q2 c' k% N/ ~
      自行选择一组数据,画出基础玫瑰图。& j8 t! I! C, w. i

    # n2 g3 q+ m" d, Q" m: e三、实验环境/ {9 p% A0 ^' _. Y$ b# O7 x0 t& Q

    1 a- i' ]0 I7 ?  ython 3.8
    " y+ H" R+ m$ j# r- \. p; Z# W% B0 t5 r) i/ z/ v  ^* d
    四、实验步骤+ A7 d  v- J" }2 o

    0 U+ c0 L# Q" L! t6 A查阅文档,了解南丁格尔玫瑰图的原理。1 ]( c3 H  F9 p2 w5 @  j5 \' @& R
    选择一组数据,编写程序画出玫瑰图。
    ( m$ j! t$ g6 o$ F  s) q五、实验代码及测试
    : \) g, e* U- K4 q7 o# t- w; A) v6 S1 o3 {. P8 ]& ]0 I4 |. V
    1.源代码
    5 V1 ^; F  b$ H0 N1 V
    $ z" b# S8 s) y* A4 |+ C; E+ p8 aimport matplotlib.pyplot as plt
    8 u6 M1 m2 t& A" Nimport numpy as np/ a7 l; ]" x( {; A9 j
    import xlrd
    4 C$ ]6 P+ ]( R5 F% e3 w4 d1 l) s. }1 _
    '''$ T; v: c- l. c  e6 k1 O! W+ ]
        按列读取excel文件并存入两个列表+ E; H- W+ q2 W. f, p' k5 e
    '''5 p& ?6 D, H# E# T, p' i% }  ?
    data=xlrd.open_workbook(r'亚洲国家疫情数据.xlsx')
    ! a8 X- M8 r7 {7 R: G2 ~5 T6 ]table  = data.sheets()[0]   #通过索引顺序获取工作表% C7 g; n+ o: z2 @0 H+ [8 @
    cols_n = table.ncols 2 ^' l$ B% z6 H9 i: m
    country_list = table.col_values(0,start_rowx=1) # start_rowx默认为0,设置为1去掉列名- M& _  ~( p9 V
    data_list = table.col_values(1,start_rowx=1)
    / B9 u; b$ X8 j* ~; x# print(data_list), _3 W3 c- T1 n4 H( A' d
    1 L- P2 v  l# y) K8 i
    '''
    $ o! Y  J7 e: S    计算角度
    ; S; e6 L/ L' w) E- W'''. [7 I- f( Y- \
    n = table.nrows-1           #去掉列名" `. B  G2 P- ?
    theta = np.linspace(0,2*np.pi,len(data_list))    # 360度等分成n份
    ' J* {- v& R8 ?# b1 w/ v9 `
    * c0 ?5 V6 D! H1 }" s9 d! ]+ n& b'''
    , v+ u! E  p& r- z( q    作图
    ; K1 |. c: b- g# V; ~3 V& J''', ?% {. ?7 Q) N& y
    # 设置画布
    2 i. [* ^- ^6 X2 D* ~; f% Z  ?fig = plt.figure(figsize=(12,10))
    4 H1 M8 K  C0 I) N9 w! |# 极坐标
    ; K' j) Y! p0 g# J3 Max = plt.subplot(111,projection = 'polar')' B4 y2 B" F) T
    # 顺时针并设置N方向为0度+ c7 _- R1 u- G. H
    ax.set_theta_direction(-1)0 V" h9 f0 q8 c  r7 X; o0 \" ^
    ax.set_theta_zero_location('N')
    + Q7 y8 }: m; h- c. C! V, t  O# D! E9 j' W7 E7 z4 y* I% i% r% v
    # 在极坐标中画柱形图4 F+ n/ x, o, q1 V
    ax.bar(theta,
    0 ^7 [# d+ s& P1 r; ~        data_list,0 j1 N1 z' T6 l5 Q) \0 x2 W
            width = 0.33,  X$ |/ T# w; O: @9 a' s1 `8 V2 Y
            color = np.random.random((len(data_list),3)),
    ; X1 Q' X- d+ T9 I) k        # labels=str(country_list), 0 p0 w; ]/ N- S; W) j4 G
            align = 'edge')
    0 O; o; ]! P: e''' 4 e: K/ e- Q$ Q5 \
        显示一些简单的中文图例& y2 z% H+ j. {
    '''
    & X' c$ I( o7 }) ^: O4 f/ f4 jplt.rcParams['font.sans-serif']=['SimHei']  # 黑体
    0 u6 D/ S6 t# Cax.set_title('亚洲国家现存确诊',fontdict={'fontsize':20})% }* r' H# Q2 U- i( I
    for angle,data in zip(theta,data_list):
    8 B5 d  ?6 Q, ^7 T4 \    ax.text(angle+0.03,data+100,str(data))
    & }8 z, w. p* L
    0 j3 o: |- V5 @/ i, Z) e7 M5 a, S9 y
    plt.axis('off')
      H( k; g  i2 H
    ) M; {, w" A% h/ d6 C# v. C  |' y% bplt.savefig('Nightingale_rose.png')* A  ~4 Z1 `: X- _1 l3 ]: g
    plt.show()
    9 `. _8 _7 X$ W6 s% B% \/ R" c) t& q! [) g) f% _- v
    . g4 c* `% m1 _% r1 j
    2.运行结果
    3 M' ~5 c# `4 u( m  k 1.png
    8 p' F" `4 F& M  ^
    % P6 @9 X: o" I  b
    0 K8 T1 j6 U6 v3 z8 o7 T  y) F3.excel数据表( L4 F( v: [3 H1 @( h9 H9 q
    2.png % L: `* y5 H7 v2 i7 q

    & m1 A7 h- O9 r+ o% K# P: S  h4.说明  m" ~+ p: t$ @+ E6 T+ @" W$ i
      四位数过长,而对应的图所占比例很小,所以在图上的标注有些重叠.
    ' c4 b% E6 O5 y/ L1 K. Q  实验让画出基础玫瑰图,并没有图例和标签的要求,而且给玫瑰图设置标签的步骤比较繁琐,所以没有涉及到.
    2 Z$ `+ [9 k& @2 x+ S————————————————
    ; e* m- Y5 T0 w版权声明:本文为CSDN博主「小兰同学」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。$ {  n- J- G+ u
    原文链接:https://blog.csdn.net/weixin_42323041/article/details/106263852( x* A/ M+ ]0 K( ]2 ?, H

    4 T+ C& E2 e3 i4 h# ~( A; ]" ]+ i/ S4 G
    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-4-18 21:59 , Processed in 0.446274 second(s), 55 queries .

    回顶部