QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 7731|回复: 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

    7 c& k% n; N6 S$ H/ ?! s  cpython+matplotlib绘制南丁格尔玫瑰图8 ~0 {7 }% H2 s
    实验:绘制南丁格尔玫瑰图, E# f* u% e  r3 N' ~, d
      本实验有一定难度,有人说matplotlib绘图和matlab大同小异,我看除了一些函数名相同之外,其他的像参数和使用方法很不一样.另外我不知道是不是在matlab中画玫瑰图直接一个"肉丝"函数就成了,为什么matplotlib里面没有~~% {% u6 }1 y1 c: B: q" k1 N
      无论如何还是感谢本次实验,虽然费了点时间但是我对函数画图有了一定深度的了解和掌握,草草在python之matplotlib库重要绘图函数简介里面记录了一下,因为内容太多没有一一写成博文,但是附加了一些别人博客的链接,还是很有帮助的.
      `2 P7 p% G" z- V- X4 |; R$ p
    ' B0 @  M$ n: ]  R文章目录3 s" ?1 ^  H0 |( P7 F
    ) F+ A7 G- b( g0 X4 e7 l( j
    一、实验目的
    / V& a. L$ Y) |( l9 ]二、实验内容
    ' Z) N" ?7 B2 B+ p- t$ m1 _' j三、实验环境4 R1 j+ q$ ~. |. Y0 e
    四、实验步骤1 s6 J% e4 y2 }! H! p: x& J/ ]: \
    五、实验代码及测试: |  u; g2 n/ k2 f( T
    1.源代码
    7 i8 U8 v1 C1 d/ R7 o( b7 k3 m2.运行结果- ^7 E/ b9 L/ P) t. Y
    3.excel数据表
    8 Y( _( ]+ C6 C' N- ]  ]一、实验目的( O) p; _: Y9 m# \

    5 Y2 r8 y  Y( D  了解玫瑰图的前世今生;了解matplotlib标准库中的pyplot模块;了解在极坐标系中绘制柱状图。" g3 a1 s2 A% l1 X
    & P: M* _0 a: j2 r3 t
    二、实验内容
    9 v& G1 u+ ^7 }& Q
    0 {; q3 e$ T0 L0 T8 y: d, e9 d  南丁格尔玫瑰图(Nightingale rose diagram)又名鸡冠花图(Coxcomb Chart)或极坐标区域图(Polar area diagram)。它将柱图转化为更美观饼图形式,是极坐标化的柱图。不同于饼图用角度表现数值或占比,南丁格尔玫瑰图使用扇形的半径表示数据的大小,各扇形的角度则保持一致。
    $ P' [2 K) K4 ~2 O( h  自行选择一组数据,画出基础玫瑰图。
    ' w2 n( k; M0 I
    0 K- w, b1 T5 }4 w三、实验环境
    2 C  \1 K8 V# h8 Y, k
    , k1 R0 b( e: M: p. y: l4 k" b  ython 3.8# z: \  v' t0 p- w- U

    9 P  N5 i: `- k' D  V& f四、实验步骤* \/ h  ~9 C+ N+ Y
    0 c4 l4 S0 s( q
    查阅文档,了解南丁格尔玫瑰图的原理。
    6 Q6 Q9 m, _  U/ d0 ?选择一组数据,编写程序画出玫瑰图。* y7 R) a. N8 A% e6 g
    五、实验代码及测试
    : M+ [! m$ w9 h7 q$ Y
    ! w( q+ {" H9 T( k9 r) T( @- S1.源代码5 C% y- C; h. u! C) N
    6 Q' Q) O" L; U3 Y
    import matplotlib.pyplot as plt
    & v8 M. d9 F- ?- V$ j5 ~- Z* R) Gimport numpy as np
    ( a& W! B7 {1 b4 Eimport xlrd( X+ V, x9 b1 C7 M

      d1 ~) m, M1 i'''
    / L& e; d2 i7 G# `$ D  l    按列读取excel文件并存入两个列表3 f$ F6 T, p. G$ O
    '''
    & N$ N4 U; B- d" l, |' @data=xlrd.open_workbook(r'亚洲国家疫情数据.xlsx')
      H6 O# b0 O; A! ~- A7 G; o! stable  = data.sheets()[0]   #通过索引顺序获取工作表
    1 O! F9 l9 c! s% _) qcols_n = table.ncols 5 Y& O2 K) z) i. v. [5 k/ Z
    country_list = table.col_values(0,start_rowx=1) # start_rowx默认为0,设置为1去掉列名
    4 a- \6 J9 Y8 l8 mdata_list = table.col_values(1,start_rowx=1)& j7 r! ]- o7 b- @/ y: a& ~6 x3 B
    # print(data_list)  x9 \2 E! b1 }/ F2 A) I2 b5 K
    8 u9 C4 y+ H9 S. P" j+ E( }- h* W
    '''* b/ O2 i7 Q7 X
        计算角度) u; c/ r- m% R; J8 Z: G9 D# \
    '''
    ; S" ^) q, A' L; x8 q& O; i) fn = table.nrows-1           #去掉列名3 \( d) Y9 u: x7 B5 g& S% e2 o8 m
    theta = np.linspace(0,2*np.pi,len(data_list))    # 360度等分成n份! {: z% m; a3 F8 h3 o

    6 w, H# q* Q- ?1 W. v# q$ K'''
    8 |9 W( k8 G  z  c' p! i, u    作图! p! ^7 |, g! m1 E
    '''5 F* A' O5 J* f3 |5 _: [
    # 设置画布
    ' H0 j) q+ F4 Z9 jfig = plt.figure(figsize=(12,10)). x- U$ w- z! E
    # 极坐标
    + J. w& f& B' I/ j  \ax = plt.subplot(111,projection = 'polar')% t3 j# N" Q) P" P: ~7 M
    # 顺时针并设置N方向为0度0 W* ]; t: Y% o1 W' J
    ax.set_theta_direction(-1)
    7 w) @3 {. n$ B  M7 ]% ^ax.set_theta_zero_location('N')
    : w' @3 [1 t8 P0 S5 W4 r* R6 I" l2 G
    , h) B, Z+ _. N0 g. U6 N5 G# 在极坐标中画柱形图
    8 [, M6 ^3 C# wax.bar(theta,! a3 h/ L- e2 G2 f0 Q
            data_list,! u# F2 r- V1 {+ ?: i
            width = 0.33,
    . ~7 X# ^% q6 q5 g, T! y: G        color = np.random.random((len(data_list),3)),
    & I, H% f. O- [, e; A        # labels=str(country_list),
    ) N; d2 w, v: c2 Q1 t        align = 'edge')% Z" H) z+ q3 `. y
    '''
    & D: E6 f5 a! S+ L    显示一些简单的中文图例
    3 U+ F0 t, d- K, s* @% M'''
    1 `! I% `( m  N5 q1 z9 @: d, Splt.rcParams['font.sans-serif']=['SimHei']  # 黑体5 _) c; g- J$ I2 b
    ax.set_title('亚洲国家现存确诊',fontdict={'fontsize':20})) f! t3 q$ U% I: c
    for angle,data in zip(theta,data_list):) A4 J' J: Q5 q+ X$ A& @
        ax.text(angle+0.03,data+100,str(data)) - _7 m; u  b0 E! V$ O) o

    0 O5 g& `& J. p- d3 f
    & w+ q  D- G/ w/ D. x8 Gplt.axis('off')
    4 `1 f6 G' E% e% w8 b( Z  U# z/ H! k. i' x: C+ H
    plt.savefig('Nightingale_rose.png'), h3 j7 N! ^3 ^2 E
    plt.show()! g+ b( c  Z  G6 ^& y. [
    2 I9 h9 C6 B! ]
    9 v8 U6 W7 ^- }
    2.运行结果
    - V! }- N2 U  z! y8 I' @ 1.png
    ' g3 ^/ n( C8 {: ^* A+ }# w- q+ k% ~% M" F) Y( h
    * t  S7 L. g7 ]( P* a
    3.excel数据表: O! }* [2 W8 f/ T
    2.png
    2 O% x$ V: V% r9 p2 j
    / P0 B; w5 X7 o* q4.说明
    . {+ p$ L- `. s8 P: g: L  四位数过长,而对应的图所占比例很小,所以在图上的标注有些重叠.
    ( ~2 a' Z4 a1 Q: ~! g' S  实验让画出基础玫瑰图,并没有图例和标签的要求,而且给玫瑰图设置标签的步骤比较繁琐,所以没有涉及到.! b; H5 Z$ k0 ?, ]
    ————————————————& a8 x  p* v5 e
    版权声明:本文为CSDN博主「小兰同学」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。" a3 ?  w+ d, Z; E8 }; V  B
    原文链接:https://blog.csdn.net/weixin_42323041/article/details/106263852
    ) I/ S4 a9 ?& g7 ^1 q. w) q/ J2 H; c: l0 k2 ^

    2 F" S  C0 v3 D
    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-19 07:11 , Processed in 0.429772 second(s), 54 queries .

    回顶部