QQ登录

只需要一步,快速开始

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

    - ~8 o2 J/ y" E4 F6 d/ x0 S- E+ p4 Bpython+matplotlib绘制南丁格尔玫瑰图4 H2 g7 j7 Z5 C8 S
    实验:绘制南丁格尔玫瑰图# ]) ~8 u& }% @# c! l+ X
      本实验有一定难度,有人说matplotlib绘图和matlab大同小异,我看除了一些函数名相同之外,其他的像参数和使用方法很不一样.另外我不知道是不是在matlab中画玫瑰图直接一个"肉丝"函数就成了,为什么matplotlib里面没有~~
    * G4 l3 I/ k" c0 p! A. Y  无论如何还是感谢本次实验,虽然费了点时间但是我对函数画图有了一定深度的了解和掌握,草草在python之matplotlib库重要绘图函数简介里面记录了一下,因为内容太多没有一一写成博文,但是附加了一些别人博客的链接,还是很有帮助的.9 A6 k# E6 l+ I8 q9 @
    / s# R  b' L7 f
    文章目录" s5 R- C' Y, ]2 U  A9 E
    6 v$ i4 r2 s- D& \
    一、实验目的) @; q" h% w: B8 J1 q3 |- D* l1 U
    二、实验内容+ A3 [9 c( J+ [/ d
    三、实验环境
    & P0 G: |% |$ [& W四、实验步骤
    7 F/ N: g0 s( w4 C! _7 `五、实验代码及测试; V6 Z1 |! N9 ^/ Z3 b6 q
    1.源代码
    ; \" ~  y: W8 z5 {2.运行结果1 ^1 Q8 u: C4 D5 w- R4 b* c' n
    3.excel数据表1 C: t) p+ S1 Z  a0 M0 z% c* `3 Y3 |
    一、实验目的
    5 b6 x: d9 m8 i( j) b- @9 [$ [$ K. J* C. Z
      了解玫瑰图的前世今生;了解matplotlib标准库中的pyplot模块;了解在极坐标系中绘制柱状图。1 Q0 S. j/ z* C8 _. r

    ' ?" I/ E& ^( E二、实验内容1 v* b* ~* H$ z/ d

      |5 p* I6 W: e4 \( N- V% v  南丁格尔玫瑰图(Nightingale rose diagram)又名鸡冠花图(Coxcomb Chart)或极坐标区域图(Polar area diagram)。它将柱图转化为更美观饼图形式,是极坐标化的柱图。不同于饼图用角度表现数值或占比,南丁格尔玫瑰图使用扇形的半径表示数据的大小,各扇形的角度则保持一致。
    , I/ P6 W7 s# r' ?, U1 I1 I5 w+ f. Q  自行选择一组数据,画出基础玫瑰图。
      t8 T- h8 O0 w3 S
    ; U. q6 E4 u2 e- s" k& |7 s三、实验环境7 t" J/ L/ z5 Z2 H1 X3 c6 U5 F$ O
    , I" x' y" D" V
      ython 3.8- F/ D9 K1 K: L

    , x- y4 P# c8 p+ e四、实验步骤
    0 n7 R$ W% d: }+ }( l8 C" A6 ?
    & D7 v2 ~0 n7 B$ ]- m查阅文档,了解南丁格尔玫瑰图的原理。
    1 }$ O6 O7 r. j, r选择一组数据,编写程序画出玫瑰图。
    $ @9 l. x: J. S2 F五、实验代码及测试
    ; T+ B0 ~2 }, N5 a8 P/ l4 m6 v7 X9 D$ b, v8 V+ x& J5 @8 {' D
    1.源代码. o4 R5 [0 l( Z5 _7 M
      |/ V, Q+ s$ k2 I5 Z9 Y4 [! y
    import matplotlib.pyplot as plt  {6 W. _- O9 {. A* X
    import numpy as np5 ~/ \& I+ f; N$ u) H
    import xlrd
    1 ]# E" A/ t+ x- V) `, h. T
    & a; h, e( v4 W' \) Z'''
    + D/ c! h* L0 Q/ k% D$ K  M    按列读取excel文件并存入两个列表9 h8 E" K# |% O( ]0 D; l
    '''
    " ^$ l( v: C1 X7 C) ]data=xlrd.open_workbook(r'亚洲国家疫情数据.xlsx') # V' Y* i1 t* \$ x! O( Q7 T1 H
    table  = data.sheets()[0]   #通过索引顺序获取工作表' i- d: |4 {! h: N8 r
    cols_n = table.ncols
    ) C5 g4 B- K5 K( Mcountry_list = table.col_values(0,start_rowx=1) # start_rowx默认为0,设置为1去掉列名
    2 }3 j! w, k: adata_list = table.col_values(1,start_rowx=1)$ f4 D2 t2 ^0 W9 {2 |4 d
    # print(data_list)' t% U/ j, H& V: r/ S5 J
    " p8 Q) w; D! r0 |
    '''
    ' p, p( M/ I% ~1 p# ]7 h    计算角度
    # J. b2 E3 W1 ]7 ]: C9 o8 Y( {'''8 I0 {& f0 w- t% o, \
    n = table.nrows-1           #去掉列名
    ( ^: C, X1 e. L* I: ]theta = np.linspace(0,2*np.pi,len(data_list))    # 360度等分成n份, T" }& L) b' U( }- }# m  P

    / l& c) d6 U% a$ o'''
    % {0 S/ U# x* L, H8 C    作图
    + S0 M% A2 H7 z  a'''
    ) X! b9 w' z' z. h3 U$ X# 设置画布5 B  M2 F5 }6 ?# r
    fig = plt.figure(figsize=(12,10))+ Y( ^: o9 p. T* j  b2 V5 Y4 n
    # 极坐标
    ( V; e! G. y+ T1 x0 @ax = plt.subplot(111,projection = 'polar')' @+ `) _. y  a9 `& l- K' m
    # 顺时针并设置N方向为0度
    $ K! C# ~4 [6 t% p; A) Nax.set_theta_direction(-1)3 M9 O! G* ~$ [5 Z0 U
    ax.set_theta_zero_location('N') . [. G, T2 o3 d, Q* y5 f) Y, [, e
    0 d3 T2 Z" u* o  L$ n7 `0 T
    # 在极坐标中画柱形图& `8 i1 d' k1 {! r
    ax.bar(theta,
    . [0 W" T; i1 C) `        data_list,
    % s+ g$ r! i2 U8 p( x        width = 0.33,, I/ q  C" J+ z$ k- X
            color = np.random.random((len(data_list),3)),% N% Q( `. K8 n; G: z3 U
            # labels=str(country_list), - d) `9 n1 `) P0 B4 u
            align = 'edge')% @* Z, q  W$ Y8 r% M7 j
    ''' % a1 M: {4 n5 L. u' _9 u: S; D! d/ a
        显示一些简单的中文图例2 |' c% a& {& I" t! ^5 G
    '''
    / A$ Z4 ^) M9 f: R8 nplt.rcParams['font.sans-serif']=['SimHei']  # 黑体
    ' K9 N% h: A/ oax.set_title('亚洲国家现存确诊',fontdict={'fontsize':20})% T( t! j0 Q1 T) C( M0 I
    for angle,data in zip(theta,data_list):
    - J1 F3 `9 \( t, ^( V7 h! G# p" ?    ax.text(angle+0.03,data+100,str(data)) 7 i% f" f$ f; h

    3 y  b9 _5 R, |
      o% H2 C. a* Kplt.axis('off')9 }% Y  U! P% T1 P  D

      j/ b! o, X- L6 [# ^8 b; M% ]plt.savefig('Nightingale_rose.png')
    ' j2 {1 \0 b) F0 b  l5 }: Fplt.show()- D& }# X" v3 d6 w+ C6 Y

    2 |' E! S8 w# H# W9 e/ K9 ~# n" C) V. W
    ( g) b7 f& Q- F4 ?2.运行结果
    $ [, a: C% E, w) y9 ~( W 1.png . ]1 i. C1 \. ]2 k3 X% h, ^

    ( m6 q/ c! d$ P: d; s% l0 s  _$ M7 H' e
    3.excel数据表
    2 X0 |# O8 Z4 @: F, f8 j, J( C# c 2.png
    : A) o8 B/ `( L& t) G1 Z$ i) ^& q, t% I- r5 Q/ ^" @# m1 W7 A2 @
    4.说明
    , M( X2 _( Z6 ]6 s7 ~8 @' `  四位数过长,而对应的图所占比例很小,所以在图上的标注有些重叠.
    # I( E# l, h/ z3 G8 q  实验让画出基础玫瑰图,并没有图例和标签的要求,而且给玫瑰图设置标签的步骤比较繁琐,所以没有涉及到.
    " U/ A3 _2 k* j  J- Q————————————————$ q) F* y7 J1 H/ `' m
    版权声明:本文为CSDN博主「小兰同学」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。4 c% a# c4 x5 f+ i
    原文链接:https://blog.csdn.net/weixin_42323041/article/details/1062638521 b1 X0 {( E$ T% _* `2 c
    9 V. i8 w) T7 r) d5 |: {: K1 A7 h

    & r- i. ~. A% W$ I, G' X& s' 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-7-19 12:45 , Processed in 1.604851 second(s), 53 queries .

    回顶部