QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 7244|回复: 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
    ( d& J. V' C9 G0 j) Q. \8 K" B2 U
    python+matplotlib绘制南丁格尔玫瑰图& b# d7 u) g; ^# Y
    实验:绘制南丁格尔玫瑰图: f+ Y1 _! G: Z% \9 E  V
      本实验有一定难度,有人说matplotlib绘图和matlab大同小异,我看除了一些函数名相同之外,其他的像参数和使用方法很不一样.另外我不知道是不是在matlab中画玫瑰图直接一个"肉丝"函数就成了,为什么matplotlib里面没有~~5 F+ |3 [) ~. y5 U$ v! b
      无论如何还是感谢本次实验,虽然费了点时间但是我对函数画图有了一定深度的了解和掌握,草草在python之matplotlib库重要绘图函数简介里面记录了一下,因为内容太多没有一一写成博文,但是附加了一些别人博客的链接,还是很有帮助的.# A1 @" k5 L4 A0 T) f
    & |8 {  {6 {1 b1 h5 n
    文章目录
    9 B, q+ P, d5 I6 U. E1 x; ~6 E( O
    : e3 e) E+ `+ U* l一、实验目的/ ~8 N( f. L# c8 _. _6 j
    二、实验内容+ d) Z( M9 b+ U! p9 u
    三、实验环境
    1 ~' C: n' \' E1 R9 Y) A6 a) S四、实验步骤
    $ y+ |2 y! K# p# K五、实验代码及测试
    3 ^8 Q2 p3 k# b8 D, n8 o( M1.源代码, z7 b. U  A8 X' U8 M- U: h
    2.运行结果
    3 Y  n! d8 ]) v$ I  [3.excel数据表
    , P5 a( o+ P: A3 t  ]5 `一、实验目的
    * v! G7 r% h9 t# F; |& q
    ( O) e$ h5 H7 u% @4 ^5 U; G  了解玫瑰图的前世今生;了解matplotlib标准库中的pyplot模块;了解在极坐标系中绘制柱状图。; e2 x: S! [% [
    1 @9 i: g; I- P* E1 R6 D3 {2 T0 p
    二、实验内容, l$ P0 l9 P) ^. D
    ( z9 C7 l% m& v% q7 x& A" M
      南丁格尔玫瑰图(Nightingale rose diagram)又名鸡冠花图(Coxcomb Chart)或极坐标区域图(Polar area diagram)。它将柱图转化为更美观饼图形式,是极坐标化的柱图。不同于饼图用角度表现数值或占比,南丁格尔玫瑰图使用扇形的半径表示数据的大小,各扇形的角度则保持一致。
    : x2 `( b, ^5 f9 S  自行选择一组数据,画出基础玫瑰图。4 d; G0 m7 D3 \

    1 o* M; U2 {3 X; s三、实验环境+ L( b2 L# f1 X: o2 b- g% C8 s

    . J5 Q9 K' o- e1 [8 m7 N  ython 3.8
    1 ~9 ~& P( D3 L( Q2 W2 A/ J4 q
    5 I5 N7 I8 W) W% z8 U- W四、实验步骤' {3 {0 u6 s% v! N9 O) l3 p

    9 C* a, b8 O) r查阅文档,了解南丁格尔玫瑰图的原理。
    ' f  \3 c$ B, H- B! E选择一组数据,编写程序画出玫瑰图。
    - y- o7 j# w% z( C* f: j五、实验代码及测试: |3 Q4 j6 p$ q. Z6 k# k' \9 N
      q$ t& M. E+ J! y) A- D2 A8 o
    1.源代码
    9 i8 y0 P- g" R" v7 x1 I9 h% w  J% `* ?
    import matplotlib.pyplot as plt4 u! F' q% d; h- Q9 d7 a( Y0 R/ h
    import numpy as np% P  l' a1 o! ^
    import xlrd4 R6 ~" Z8 M; G4 m
      J* `: _$ g+ F2 C* H, Q, w. M! r
    '''2 n' k; B" r1 G
        按列读取excel文件并存入两个列表# A+ p6 U' v* p4 h
    '''
    5 T* L* q: B0 G8 {data=xlrd.open_workbook(r'亚洲国家疫情数据.xlsx')   N, k4 {9 i9 z) V3 z9 n% j
    table  = data.sheets()[0]   #通过索引顺序获取工作表3 s$ }# H! n( q$ w+ Y
    cols_n = table.ncols $ s" n* j# U% X: z. X/ M: A+ y
    country_list = table.col_values(0,start_rowx=1) # start_rowx默认为0,设置为1去掉列名
    1 T: |- u  R* z6 Edata_list = table.col_values(1,start_rowx=1)# O+ X+ o, {& D5 K( }6 z
    # print(data_list)
    # x' s/ t; t* x7 M; v
    8 A/ T4 ~6 L4 Q% W$ @+ A1 J, j'''( Z* m- f( i- h9 s
        计算角度: |- `$ r, O: q
    '''3 j8 ~# z9 W1 h- h: l' z) H
    n = table.nrows-1           #去掉列名" {! T1 q3 X  j8 T2 Q
    theta = np.linspace(0,2*np.pi,len(data_list))    # 360度等分成n份
    ' v% f7 e+ s$ B2 f) e0 d' }1 U
    2 t% j$ Q: ^) o& h& N4 m'''
    4 [& Z- O6 F* M* X' G/ h- ]    作图, |7 Q1 B& v. {$ n. F8 M0 J* p
    '''
    % k3 u* t4 x8 u- C# 设置画布
    % U& M4 N, j3 [/ v- o* h1 y: }% S! Zfig = plt.figure(figsize=(12,10))3 M; \) m0 p# a, M' L# r3 A
    # 极坐标) [5 l) m4 c3 j+ B$ ^
    ax = plt.subplot(111,projection = 'polar')9 w  C$ l0 r( A! D+ Y
    # 顺时针并设置N方向为0度5 j. K- M8 ]( N+ C
    ax.set_theta_direction(-1)
    - u! c  k! F* C$ _+ kax.set_theta_zero_location('N') 4 E& Y$ m6 y8 t; Y- ^
    2 s' `/ {: d/ ]* r3 T2 q5 W: N
    # 在极坐标中画柱形图7 t$ h; W0 l; B4 }7 Q; W
    ax.bar(theta,
    % F, o6 t5 {) T. }2 a# b        data_list,
    . o3 \9 t2 T( d) Z6 ~        width = 0.33,$ p5 X' \  G1 L  D
            color = np.random.random((len(data_list),3)),5 j0 f# I. Y7 \8 ?
            # labels=str(country_list), 5 d% o& B: P6 H4 O9 ^0 p
            align = 'edge')6 D( ]0 b$ B! Q2 k% L
    ''' ) Q7 ~; N2 u" w; U9 d
        显示一些简单的中文图例
    6 X" h1 M1 l1 a# a'''1 Y* P- S1 l, R
    plt.rcParams['font.sans-serif']=['SimHei']  # 黑体
    & K3 l! Q; R6 I. g) Tax.set_title('亚洲国家现存确诊',fontdict={'fontsize':20})1 s( r) w; Q6 T- ^+ a2 m* S
    for angle,data in zip(theta,data_list):
    1 }. u0 u" ~7 o2 H; z9 [    ax.text(angle+0.03,data+100,str(data))
    2 @4 C& f5 }* [$ g4 _/ R; H/ c4 ^# j1 N5 \( j

    $ B0 x0 d* I2 L/ _+ Oplt.axis('off')3 _5 q8 n# L- A$ S3 ?0 ]' g

      @% Y. _' Q7 Nplt.savefig('Nightingale_rose.png')
    , R* V7 z! Y5 {4 _$ Y. u& Nplt.show()
    8 u8 d; L( Z; q$ c; q* S
    : ^2 Y+ g4 r; c, w; t5 ^
    8 O6 p% U9 u6 K' d" d6 T, y0 l; t2.运行结果
    % s3 V7 t& i& ]+ z2 ~" J: ] 1.png 1 g2 d# C& [5 P8 k  k4 A9 K

    ! A" T; j& e' i8 U
    # v( S' ~% }) e) p6 X# f) c. r3.excel数据表. k# T# X% `0 x1 U; ?
    2.png * _/ E4 B# d" Q. R' ^& U

    / B5 x" o! Y9 Q% h4.说明- n% N' P( J1 w9 l1 u6 ~* x
      四位数过长,而对应的图所占比例很小,所以在图上的标注有些重叠.! P5 p/ L; S/ f
      实验让画出基础玫瑰图,并没有图例和标签的要求,而且给玫瑰图设置标签的步骤比较繁琐,所以没有涉及到.# u3 b7 X. k/ U# T, Y. ~3 Y
    ————————————————: ^& n3 d) U0 K! V8 r5 J
    版权声明:本文为CSDN博主「小兰同学」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。/ f$ H6 G" d1 v4 _* J. q* {
    原文链接:https://blog.csdn.net/weixin_42323041/article/details/106263852: ^; c( [0 c& b& R+ ?; Q+ n

    . f. r7 J& ^$ O2 n( Y* ~, r# |, o1 _) q
    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-6-26 09:53 , Processed in 0.850122 second(s), 54 queries .

    回顶部