QQ登录

只需要一步,快速开始

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

    " {$ a7 W% h" q4 Dpython+matplotlib绘制南丁格尔玫瑰图: _9 ]6 o* c6 u8 Q- _
    实验:绘制南丁格尔玫瑰图
    / {% e) ^" ^, R' b: g; r9 Z  本实验有一定难度,有人说matplotlib绘图和matlab大同小异,我看除了一些函数名相同之外,其他的像参数和使用方法很不一样.另外我不知道是不是在matlab中画玫瑰图直接一个"肉丝"函数就成了,为什么matplotlib里面没有~~; O( E  x' P! `2 G4 {' G/ |
      无论如何还是感谢本次实验,虽然费了点时间但是我对函数画图有了一定深度的了解和掌握,草草在python之matplotlib库重要绘图函数简介里面记录了一下,因为内容太多没有一一写成博文,但是附加了一些别人博客的链接,还是很有帮助的.
    ! V# N* @' H7 T
    " \! d0 f7 {/ A4 n文章目录
    5 j' y# S( ~! j% a) Z& \6 [
    + M7 K; x) d  y7 D, p2 u一、实验目的! t: ^8 U" Y' O: Q
    二、实验内容
    7 G' \1 `! M3 @& M) d三、实验环境
    2 h+ Y+ u" b# B2 T" q! C四、实验步骤
    ' T3 k' H8 @- v4 J' X8 Y五、实验代码及测试1 [3 \( M* f# X( P" F; U
    1.源代码& T& Z) N: v% r0 C: e
    2.运行结果
    8 [/ U- Z5 ?8 k' v  K1 Y3.excel数据表" u. E  i: I: T
    一、实验目的* X* x) W/ n/ H* ]# E- k; q
      F0 H. v+ Y* k  ]: d
      了解玫瑰图的前世今生;了解matplotlib标准库中的pyplot模块;了解在极坐标系中绘制柱状图。5 W1 Y) I- ~9 Q# b% T* w2 ?
    * S% _2 f  Y2 f% L) c
    二、实验内容
    7 _8 H" g! _" e9 _/ I
    % X/ W% _. ?) s3 E0 h  南丁格尔玫瑰图(Nightingale rose diagram)又名鸡冠花图(Coxcomb Chart)或极坐标区域图(Polar area diagram)。它将柱图转化为更美观饼图形式,是极坐标化的柱图。不同于饼图用角度表现数值或占比,南丁格尔玫瑰图使用扇形的半径表示数据的大小,各扇形的角度则保持一致。2 V9 _) y% L% A" {* Z, K) L
      自行选择一组数据,画出基础玫瑰图。
    3 X) h  N' M' [3 C; H0 L' b2 n" f; u$ i) ?
    三、实验环境3 G8 O9 G2 Z9 X' l" X5 f  T" V1 z
    ) \' @5 X' k8 M7 _2 M% Z
      ython 3.8
    - R5 A( \: e1 x' h6 G3 ~% t1 Y: n' U# H3 _( J. d) d
    四、实验步骤
    4 W& s, z( p" `4 O( U( b! [$ g" A, r3 d4 m, W* |. b7 M
    查阅文档,了解南丁格尔玫瑰图的原理。
    - X0 v$ D: ]0 M选择一组数据,编写程序画出玫瑰图。
    - P" K# n' p$ Q五、实验代码及测试
    ) [' x4 m+ T" h% V* e2 U1 V& N# Z: j7 f
    1.源代码
    . T& s+ u% u( w$ V0 Y, @9 X
    : k& ~2 Q9 V. Qimport matplotlib.pyplot as plt
    9 W( m* r7 w. @) iimport numpy as np8 {; m7 P* t: |4 k6 k, N
    import xlrd* W% K/ f8 j* E3 }( p" {

    8 U, ^) E) x/ O9 E, K3 h'''
      j8 B+ {. h$ {" s/ m5 a+ f    按列读取excel文件并存入两个列表
    ( c5 ~2 u! N) V- p7 l4 y" Y& B* a'''" g% T* L, j! B/ a) n9 ]; A, S' m
    data=xlrd.open_workbook(r'亚洲国家疫情数据.xlsx')
    ) s' T/ L  a# Q$ s- M$ R5 xtable  = data.sheets()[0]   #通过索引顺序获取工作表! z3 e( y2 f% r" m7 G5 X
    cols_n = table.ncols 9 o6 E! g6 [! S/ [- ]
    country_list = table.col_values(0,start_rowx=1) # start_rowx默认为0,设置为1去掉列名  g$ N) b+ A" [: d& N8 g9 E
    data_list = table.col_values(1,start_rowx=1)
    " p0 \# H; L) I, N' K# print(data_list); E( Q$ E6 M/ d5 J
    ; Z7 a) ~7 C- s  S$ T, {
    '''% E4 Z9 Z  d6 H! d
        计算角度
    ' |4 Q7 \. |2 t: k1 R; N' L  i* W'''+ N) S  G9 a$ ]5 X- s
    n = table.nrows-1           #去掉列名0 @. F* e& [4 r  v
    theta = np.linspace(0,2*np.pi,len(data_list))    # 360度等分成n份$ P9 l! O- U6 y9 \: ], P6 E' w
    $ T! L9 f) [+ L5 n: q1 n/ \
    '''9 f+ W1 s" M  a
        作图
    ! n  F: y. }8 g8 @" ~% t'''* p4 z. g8 T$ ]) k7 l4 k: n
    # 设置画布! M! v$ a0 k5 t( ?% P5 O* C1 R& R
    fig = plt.figure(figsize=(12,10))
    1 M1 s. |- b. U8 \! K) A# 极坐标
    ; t9 g! T7 F! t* Jax = plt.subplot(111,projection = 'polar')" G8 s+ m, n1 v& A/ P  i8 v
    # 顺时针并设置N方向为0度
    # s" D8 A0 k; k$ M) r4 Oax.set_theta_direction(-1)
    0 X) v) D" g4 ~# O+ i; k! lax.set_theta_zero_location('N')
    + h( i3 w* K$ Q' |
    ( |( V- M4 @% f( e/ k! g# 在极坐标中画柱形图+ y$ C9 S6 ^9 X2 `5 g5 i" n- [
    ax.bar(theta,& z; A8 c8 b/ ]5 n# g
            data_list,
    ; U6 n' n+ ~$ q$ V3 }$ ~- {5 T: q        width = 0.33,7 M3 V1 x; V9 q1 x1 u
            color = np.random.random((len(data_list),3)),* l. S' E  e+ v1 }
            # labels=str(country_list), ) ]0 J5 w8 S* S' T# N' i
            align = 'edge')- y8 {) L/ d' M
    '''
    8 ^4 @$ ]$ g3 ?4 N8 J& o2 [    显示一些简单的中文图例
    3 @1 C( q* {* _: a'''* J2 K$ c) |) w# I4 W3 P
    plt.rcParams['font.sans-serif']=['SimHei']  # 黑体3 A2 T$ S. i: T) o, ]# p
    ax.set_title('亚洲国家现存确诊',fontdict={'fontsize':20})) A0 n6 Y0 F- D/ L% ^3 h
    for angle,data in zip(theta,data_list):& e+ Y6 C: D7 \
        ax.text(angle+0.03,data+100,str(data)) * G5 r/ ?, J& A

    & c' {3 \& j. F5 H& m( f0 E+ r. y
    plt.axis('off')
    3 [: f8 @5 q% h/ h; R# i  M0 G4 u, e6 J2 X# w
    plt.savefig('Nightingale_rose.png')
    " F& r: c" ]+ @6 `2 Q4 U9 _plt.show()" m" F1 b0 o2 H% k

    # G- p8 i6 A$ K) c7 m
    $ P9 j! n! ]/ W  X2.运行结果
    7 h" I# f' s9 Q6 ]8 R3 d. h 1.png 2 U% G* u( ?' p# \
    : V( n8 r! g, i5 P% B! a
    4 @. I# f& x5 Z! J0 N8 A9 p
    3.excel数据表
    % Q& }# _; L) ~& ^( g  B1 R 2.png 5 k; X8 C+ ^& k
    6 z( L9 j5 Q( t: s. r2 W
    4.说明6 K# \- i& h; ?) a( E
      四位数过长,而对应的图所占比例很小,所以在图上的标注有些重叠.+ {/ R- y# H4 n/ ^+ f/ P5 c( ?
      实验让画出基础玫瑰图,并没有图例和标签的要求,而且给玫瑰图设置标签的步骤比较繁琐,所以没有涉及到.; W1 x, M* D1 m/ N' E- i3 }  W
    ————————————————
    7 y1 p5 F5 _2 H7 `* A* X+ D( P+ t版权声明:本文为CSDN博主「小兰同学」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
    6 o# [) E: O8 Z  u原文链接:https://blog.csdn.net/weixin_42323041/article/details/106263852
    6 K2 ^2 m1 f$ b! V$ ?) v% C1 D" T
    4 x4 ]' T: H& J6 i) }+ Q8 U2 b6 u. m4 b: f* i5 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, 2025-12-22 03:30 , Processed in 0.598212 second(s), 53 queries .

    回顶部