QQ登录

只需要一步,快速开始

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

    ) P+ p% B$ j4 l" q0 Cpython+matplotlib绘制南丁格尔玫瑰图
    1 e% x3 ]; L# Q; K- }- s/ W实验:绘制南丁格尔玫瑰图8 U9 b9 T! d  j
      本实验有一定难度,有人说matplotlib绘图和matlab大同小异,我看除了一些函数名相同之外,其他的像参数和使用方法很不一样.另外我不知道是不是在matlab中画玫瑰图直接一个"肉丝"函数就成了,为什么matplotlib里面没有~~
    : j, C$ e( F$ [1 M- Z3 b  无论如何还是感谢本次实验,虽然费了点时间但是我对函数画图有了一定深度的了解和掌握,草草在python之matplotlib库重要绘图函数简介里面记录了一下,因为内容太多没有一一写成博文,但是附加了一些别人博客的链接,还是很有帮助的.
    9 s* E% u4 a! D2 j
    # e3 w, n7 u1 x  _文章目录! ]" _! E0 z/ z) i
    # }5 y+ J% A1 t. H* ]/ _) @( Y
    一、实验目的
    1 q! Q: M, `, u; B7 J二、实验内容! j& A8 k6 m  s. b
    三、实验环境
    3 W+ Y5 b4 u0 u( I四、实验步骤
    ! B4 Y' X( k8 d  w# r$ O( g五、实验代码及测试. P* q9 B* o# d: Z6 P
    1.源代码
    + H3 I1 _6 R" h3 r2.运行结果! O# J8 G; X6 q! t0 M. o, {
    3.excel数据表
    % h, E2 D0 D. ]$ m! D0 h" t$ m: d, u一、实验目的9 d) w+ I1 d2 U9 P2 S: `% D
    ' j2 n2 h) v, S$ A0 v) i, q
      了解玫瑰图的前世今生;了解matplotlib标准库中的pyplot模块;了解在极坐标系中绘制柱状图。3 s$ x4 i1 I$ v8 h
    2 J' k6 g' W1 f8 i) Q
    二、实验内容4 v* R7 F% V) }( z: V

    7 h9 u; Q; \2 T. L  南丁格尔玫瑰图(Nightingale rose diagram)又名鸡冠花图(Coxcomb Chart)或极坐标区域图(Polar area diagram)。它将柱图转化为更美观饼图形式,是极坐标化的柱图。不同于饼图用角度表现数值或占比,南丁格尔玫瑰图使用扇形的半径表示数据的大小,各扇形的角度则保持一致。
    8 R0 }3 _2 L( P3 h# r  自行选择一组数据,画出基础玫瑰图。
    0 \/ i7 u- l( a, ]0 ?/ h0 @& Z4 {& [
    三、实验环境
    + ]: B/ ]0 A5 b  W. V0 g* |: k5 v0 v# k' A$ J, j" N" C
      ython 3.84 u( U) [5 l$ ^2 I# H7 E
    . r( ~7 f6 i* m+ i3 y- d$ `
    四、实验步骤; u4 W* P) n8 d- a; _

    5 _+ ~! b/ R  ^$ V* c查阅文档,了解南丁格尔玫瑰图的原理。
    / n8 @' ?$ [* g/ t9 U0 g选择一组数据,编写程序画出玫瑰图。* g9 H( B& i' ?% X* {4 b# D
    五、实验代码及测试
    . }# a, a1 G3 s/ R6 x3 D/ K
    / i6 G# H& p: Q# t1.源代码
    8 v8 T  t0 m, n" k* ?9 i! ]1 E2 i
    * m9 h7 |- E7 I, B- Bimport matplotlib.pyplot as plt7 L" N; t, V/ p  y9 Z3 l
    import numpy as np
    - J- P) F1 M5 O+ @3 Qimport xlrd4 ?+ s6 d. z! `

    5 c4 Z' w) V7 H9 W( g) E; J'''- x* g/ A, C3 A- G2 }
        按列读取excel文件并存入两个列表9 E- P0 l# F" u2 {0 D4 n
    ''': o4 F/ f! h! Q. J
    data=xlrd.open_workbook(r'亚洲国家疫情数据.xlsx')
    2 [5 f+ d0 Z+ k3 F! otable  = data.sheets()[0]   #通过索引顺序获取工作表+ |) U6 g: R! c2 s
    cols_n = table.ncols
    % f0 A9 r, K+ p+ }1 u# M2 r  ecountry_list = table.col_values(0,start_rowx=1) # start_rowx默认为0,设置为1去掉列名: C8 x0 P2 w0 ^4 p9 q# o) U
    data_list = table.col_values(1,start_rowx=1)
    3 l0 X. G: k4 Z$ _# print(data_list)
    9 D1 z' Q/ K  g. P/ I6 ?; [
    3 |& j" [) l% e4 i! _( W# |''') C, y9 g: z9 P$ x. C# x7 {  ^
        计算角度
    7 q$ K0 _) s( a8 L- M'''$ h! I* T4 a7 T, o9 U# S! I
    n = table.nrows-1           #去掉列名% \+ x( ?/ p  d/ u* Y6 W) C* ?
    theta = np.linspace(0,2*np.pi,len(data_list))    # 360度等分成n份" o$ D8 p! {: E$ Q# @$ [
    * |3 U* M5 `9 e
    '''
    / v; b* A2 n$ Z' i: _; q    作图& E2 e# M3 ^1 f
    '''5 B9 m( S! ~% U
    # 设置画布
    1 F. p2 p& {% R. g' t  ofig = plt.figure(figsize=(12,10))# s& y, n6 k4 ^) f
    # 极坐标
    % g! k- f; x! h. \0 Lax = plt.subplot(111,projection = 'polar'). [4 `6 B4 y. W7 m7 H5 e$ R0 g
    # 顺时针并设置N方向为0度7 q( P- ^! ?4 O+ Z+ f' W, m* A5 m
    ax.set_theta_direction(-1)
    ! I. K+ n4 G4 u8 Y! i6 pax.set_theta_zero_location('N') " W: V6 w( Y5 A$ ~) E! T
    2 V' ?4 _/ m" ?' a6 |% k2 X3 u
    # 在极坐标中画柱形图
    4 S5 w7 j9 d: {; t$ Rax.bar(theta,2 {. T* H+ \0 k* B/ q5 n
            data_list,
    - ], ~2 k' F4 g7 F& W        width = 0.33,' G: `4 J; b- M8 F
            color = np.random.random((len(data_list),3)),
    : x, t* F9 V. p, _5 K6 D; G        # labels=str(country_list), ; X1 A2 I& R( K  c! Z
            align = 'edge')
    ' k9 p) k( g  _6 {7 R+ F''' . g2 G% _( L2 c% e
        显示一些简单的中文图例
    " V4 b1 z  d4 s: J'''1 _  z( i" c4 @
    plt.rcParams['font.sans-serif']=['SimHei']  # 黑体
    4 X+ ]8 F7 [8 L" ]ax.set_title('亚洲国家现存确诊',fontdict={'fontsize':20})# m9 _1 l0 T* Z7 E# p! V
    for angle,data in zip(theta,data_list):* D" h6 v% x8 a; B. a7 u
        ax.text(angle+0.03,data+100,str(data)) * I. |5 E8 N7 x. F4 w  ~1 Z5 H& Q; R
    . B8 D- y3 u3 C

    : ~8 \" A. @' X( Jplt.axis('off')
    " Z3 U1 k: _  g$ ]% _+ \) G
    : s( w, z4 \6 W& Xplt.savefig('Nightingale_rose.png')$ G$ M6 h# T$ e2 y3 j: p1 {2 a
    plt.show()
    4 h% j, Q( s. [) S, l% L1 b8 O2 n
    ' ?% B0 T* @; m% T- k: F3 A$ s* H, C
    2.运行结果- T) v, B. ?# ^6 x0 o; K" S
    1.png
    % t5 a: d4 [$ c* ]/ c  y0 x" o8 g, N' X6 B& r

    # v. x2 T' F8 ], w  {& q3.excel数据表
    : B, a- ^! ]: Z. U$ ]. |7 R 2.png
    5 q- L8 q. Q4 W3 V' K7 w
    ) `8 ^, O! Z1 [6 ~: E" r8 s4.说明
    ) l3 i2 s$ G1 P) l+ g: e4 H; k  四位数过长,而对应的图所占比例很小,所以在图上的标注有些重叠.
    & Y9 P" D" N) F- {  D  实验让画出基础玫瑰图,并没有图例和标签的要求,而且给玫瑰图设置标签的步骤比较繁琐,所以没有涉及到.: l3 |3 C! m) R, J3 L3 ~% P
    ————————————————
    # G$ `# B/ K7 a) i6 ~4 y( G版权声明:本文为CSDN博主「小兰同学」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。- h8 T8 {/ ?. E" N' g
    原文链接:https://blog.csdn.net/weixin_42323041/article/details/106263852
    " Z6 c: g4 N* B& g1 _2 x: }  t* \* E- c; l6 q' ^
    2 i# x, M) c: @) s% W4 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-7-25 03:08 , Processed in 0.425769 second(s), 54 queries .

    回顶部