QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 7928|回复: 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 p& s( F  u8 p5 r; z; f! M- i
    python+matplotlib绘制南丁格尔玫瑰图7 A8 ^  ~/ H$ [6 t: g: h0 h
    实验:绘制南丁格尔玫瑰图% r6 }9 s4 `2 E) ^/ F+ F! [
      本实验有一定难度,有人说matplotlib绘图和matlab大同小异,我看除了一些函数名相同之外,其他的像参数和使用方法很不一样.另外我不知道是不是在matlab中画玫瑰图直接一个"肉丝"函数就成了,为什么matplotlib里面没有~~& I+ A% W+ @5 ^0 `3 R
      无论如何还是感谢本次实验,虽然费了点时间但是我对函数画图有了一定深度的了解和掌握,草草在python之matplotlib库重要绘图函数简介里面记录了一下,因为内容太多没有一一写成博文,但是附加了一些别人博客的链接,还是很有帮助的.& \2 B7 C+ C7 }# f7 i7 g5 Y
    . W. V; `! y+ d& e2 ?" ^
    文章目录
    : ?! X" r2 ?5 b3 C/ P7 o! G9 q3 N* t
    一、实验目的1 n! v. c% E/ f( P0 P0 i; |0 i
    二、实验内容( n# X0 b+ N. C; ?$ y: `
    三、实验环境
    2 j& h& j# a( E1 l) G: W四、实验步骤& d$ U* {8 f1 W2 H9 t
    五、实验代码及测试
    # C0 n  z, ^( G; m; l  B4 d/ p2 g1.源代码% ]7 O0 I% y/ h9 }
    2.运行结果/ }3 \3 R" W+ r  l" M
    3.excel数据表. `# u7 b# c3 ?5 W% X7 t3 e8 J
    一、实验目的9 \2 p  p( ?0 a' f. P
    ( V/ k, {/ j2 F) K- M; p2 L
      了解玫瑰图的前世今生;了解matplotlib标准库中的pyplot模块;了解在极坐标系中绘制柱状图。* x" L' d# i; s( v2 ~% L+ ^

    # F) B' U; l! i6 A/ x二、实验内容
    1 {6 q9 z) j% y7 F2 H/ p3 H
    ) @4 Z2 Y( M; A. K+ u! @) l$ @  南丁格尔玫瑰图(Nightingale rose diagram)又名鸡冠花图(Coxcomb Chart)或极坐标区域图(Polar area diagram)。它将柱图转化为更美观饼图形式,是极坐标化的柱图。不同于饼图用角度表现数值或占比,南丁格尔玫瑰图使用扇形的半径表示数据的大小,各扇形的角度则保持一致。' y3 x' v  v( h+ d& ~
      自行选择一组数据,画出基础玫瑰图。( y! P7 r. l- `! O

    ! |4 h0 w5 V) W# j三、实验环境: I5 P: ]. F$ H& f+ d* m9 q( ]- f0 S

    . M8 `- v1 H6 P  ython 3.8
    ( b( \" c. j( C3 g( c# ~0 X; b: V/ G! `: k
    四、实验步骤/ Q/ g  C4 t& f- q$ _: Y$ J
    1 z, i! W2 h6 ^$ `1 B3 i
    查阅文档,了解南丁格尔玫瑰图的原理。
    6 @: p7 s! t! y选择一组数据,编写程序画出玫瑰图。
      R! R1 U  f" D0 o9 E# y6 k3 S6 p五、实验代码及测试  t4 ~3 ]; W5 |: L: Y8 o& |
    ) g  N  B; Y. x3 u6 e& a( w2 t0 e
    1.源代码6 c5 }' w' L. g, j- [3 m
    ( N( k4 A1 B- T
    import matplotlib.pyplot as plt' L$ j& N  L& U5 o$ k( J! I! M  P
    import numpy as np
    , O" h2 q1 V8 \, {4 X% cimport xlrd1 ?; M. M0 \' h$ P$ D9 r

    7 Z# @( r' z4 v. u'''9 F- z( U. e6 d% v0 C
        按列读取excel文件并存入两个列表! S5 L7 Z  v/ R- d* s2 K
    '''2 O$ l( Z! `) ?5 a2 m
    data=xlrd.open_workbook(r'亚洲国家疫情数据.xlsx')
    : d8 m4 U' Y- r# `0 ~table  = data.sheets()[0]   #通过索引顺序获取工作表( W5 O  D+ A3 w- B/ x
    cols_n = table.ncols 7 y! [0 K" Q7 g' d
    country_list = table.col_values(0,start_rowx=1) # start_rowx默认为0,设置为1去掉列名* ~2 d4 }) @, J  k# Z& F6 N8 [. f2 M
    data_list = table.col_values(1,start_rowx=1)
    6 z' G( R; h. i! I1 D/ s# print(data_list)
    2 c/ `: p1 T$ M2 L  k* g$ _" k
    ; j) L" L: T% ?. v, i'''
    ; e3 i5 g9 ?$ n2 w7 N% s    计算角度
    * R  u) [* P8 r# N7 z, Q'''
    2 \6 A. z9 V+ o$ d- P5 E5 rn = table.nrows-1           #去掉列名
    7 j1 v" `* g) B8 E+ [! O$ rtheta = np.linspace(0,2*np.pi,len(data_list))    # 360度等分成n份$ ?  n! j5 f5 m  K' L1 x# s( e
      O6 f, t0 Z( P6 K7 Q
    '''. k8 p4 Z# x! r, f
        作图- J6 {1 X* Y. p) Z) u
    '''3 f( n& F: E+ [0 q
    # 设置画布
    1 i) l$ z: `! }fig = plt.figure(figsize=(12,10))/ N1 f- D2 H/ l
    # 极坐标
    ' q9 {* p: C9 u0 S; Z% Aax = plt.subplot(111,projection = 'polar')
    1 A4 ~, `8 @/ D# W/ g# 顺时针并设置N方向为0度
    8 G" n2 I6 D  X- V! C6 eax.set_theta_direction(-1)
    / s/ t9 @8 [3 C4 A7 y5 c# bax.set_theta_zero_location('N')
    * M7 ^1 C# v8 o; G3 F
    % ~( n# V$ D( ~# 在极坐标中画柱形图" D: g6 @8 m  [7 X7 D" X
    ax.bar(theta,7 J& }4 S( T% }! g; [
            data_list,
    $ w/ Q7 z" X7 s* f        width = 0.33,, T: Y( p$ F; w; m7 `
            color = np.random.random((len(data_list),3)),9 R7 f- V) Y3 @0 K1 p, z+ x6 S
            # labels=str(country_list), 4 U7 m! o6 r0 f# w0 p# `& ^
            align = 'edge')
    7 i* Q" T3 I) o5 y& W* u, T''' . q, A- ?6 R  p1 p/ l
        显示一些简单的中文图例
    9 p( E. K8 U! Z5 t9 r7 ]! y5 g  G'''" d, f% D* _0 {
    plt.rcParams['font.sans-serif']=['SimHei']  # 黑体# j  s7 ?2 Z# C, y
    ax.set_title('亚洲国家现存确诊',fontdict={'fontsize':20})* C$ J* V# J1 J+ k1 x5 v
    for angle,data in zip(theta,data_list):+ ?) D9 z" t+ W" R: C  k- C3 M1 b* y
        ax.text(angle+0.03,data+100,str(data))
    7 Z. I3 b6 O2 ]+ ~. U8 a' |" b7 k- v2 V5 a- a. p5 S8 \" k

    4 ]+ n; ?' j9 W3 Qplt.axis('off')( s8 ]2 |1 r: i0 Z/ u4 j
      F/ v  }# X) @
    plt.savefig('Nightingale_rose.png')
    5 |/ S5 V* Q3 |/ V$ B5 V9 Qplt.show()
    & q  U9 v) q9 W/ I9 F8 w2 {. c  S( |2 K: y# U
    2 l" z+ u; B/ s3 {5 @" k
    2.运行结果( W4 w% {- c" J& P3 z/ p' V
    1.png
    2 Y9 X  Z2 e/ w$ G5 I4 M  X! u
    " Q) j# j* u4 o% o0 t) X; L
    3.excel数据表
    + ?* K% R/ ?3 Q5 o! U' \; W/ K 2.png ; v! a7 t% Q0 {7 n
    1 r8 ?- S( I4 ~2 ~% [# B
    4.说明
    ; b* s" q& o  l+ r  四位数过长,而对应的图所占比例很小,所以在图上的标注有些重叠.8 `4 g9 a) r0 p) C6 b+ L  x
      实验让画出基础玫瑰图,并没有图例和标签的要求,而且给玫瑰图设置标签的步骤比较繁琐,所以没有涉及到.' C1 M4 s: {8 A/ s
    ————————————————
    " @+ N6 T3 u. x) L+ p0 P版权声明:本文为CSDN博主「小兰同学」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
    0 ^( `" ~4 C: c' e$ J# I, i原文链接:https://blog.csdn.net/weixin_42323041/article/details/106263852
    / \3 A4 h4 A- X; l6 F  f+ Q( C( N
    * w$ V- l% A1 @; @7 P/ n
    # A; P* v5 ^( G) o  k. z7 N
    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-9-11 02:15 , Processed in 0.518929 second(s), 54 queries .

    回顶部