QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 7739|回复: 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
      E; J. P5 V5 f6 i& ^
    python+matplotlib绘制南丁格尔玫瑰图
    ' R1 [; t4 Z" Y% Y0 C7 U实验:绘制南丁格尔玫瑰图8 S! d* U& ?# B5 o
      本实验有一定难度,有人说matplotlib绘图和matlab大同小异,我看除了一些函数名相同之外,其他的像参数和使用方法很不一样.另外我不知道是不是在matlab中画玫瑰图直接一个"肉丝"函数就成了,为什么matplotlib里面没有~~
    7 i7 Y- i1 u5 ~: a" o- ^  无论如何还是感谢本次实验,虽然费了点时间但是我对函数画图有了一定深度的了解和掌握,草草在python之matplotlib库重要绘图函数简介里面记录了一下,因为内容太多没有一一写成博文,但是附加了一些别人博客的链接,还是很有帮助的.7 E4 T7 l& Z0 P3 R$ q. h

    2 G7 G& x+ W/ I* b8 b  |文章目录8 p# m% L9 n* S7 A9 X) ?4 L8 E- Z

    % b+ h+ h/ m/ T, O' a一、实验目的
    / p6 d! X7 L$ D& H% I0 ?二、实验内容# P- ?$ F8 j: y- ?
    三、实验环境
    + q8 Q" ~5 D3 g. B. \  J四、实验步骤1 ^  R0 Z) b: j; x; d
    五、实验代码及测试! A2 ]+ Y$ c0 d( y: Z: ^' d) N
    1.源代码
    7 ^( D; {4 q% ~4 l# z! O0 V2.运行结果4 L( l/ _3 w$ E0 L! h# i
    3.excel数据表
      }$ s+ c0 x* a3 w7 P1 @一、实验目的
    % g/ Y; h" k! w5 k1 v7 J& Q1 r( b3 g
      了解玫瑰图的前世今生;了解matplotlib标准库中的pyplot模块;了解在极坐标系中绘制柱状图。  a9 }' N9 t' T! H- D* K9 ^4 G

    , _- H9 v+ e( {. c* W二、实验内容4 F! t$ `$ l8 l+ K
    ) Z& n. L) m" d
      南丁格尔玫瑰图(Nightingale rose diagram)又名鸡冠花图(Coxcomb Chart)或极坐标区域图(Polar area diagram)。它将柱图转化为更美观饼图形式,是极坐标化的柱图。不同于饼图用角度表现数值或占比,南丁格尔玫瑰图使用扇形的半径表示数据的大小,各扇形的角度则保持一致。6 k! i" R) E9 O/ w4 |3 u3 x  ]2 d
      自行选择一组数据,画出基础玫瑰图。! x% F1 ~  D6 ~

    3 X/ K7 \- {/ P+ L三、实验环境- ?" [( w( j0 L) l# H1 k, f  Q
    3 O% L, e: R+ {# t" b: `
      ython 3.8
    ( v5 q$ b3 J& `
    ) P4 Q5 A1 E8 Z四、实验步骤4 E8 z5 q* r8 s! p- x( y+ H2 x8 u
    & A7 k# y9 x( r% P6 i
    查阅文档,了解南丁格尔玫瑰图的原理。. z$ a1 k- [3 y6 r( F& j
    选择一组数据,编写程序画出玫瑰图。5 N2 a0 U0 y. F& G" {5 B8 {
    五、实验代码及测试
    7 A5 x( ^: C  @1 b
    ' r( X: ]7 B' x. e& j, a1.源代码; ~2 b- k; t6 Y
    5 \9 h- {) R) S/ E1 A: c0 n
    import matplotlib.pyplot as plt
    4 Y. `; b5 ^8 o. T1 L- c* L) P& @import numpy as np) [! |, o: g( ?- b
    import xlrd4 r, h7 z3 Q" l- }. X
    + E  g. U* Y2 o5 H, Z5 F- \& @
    '''
    . M, {/ ~% y; I$ g# X    按列读取excel文件并存入两个列表; V  C: Q  ]+ P2 J$ J
    '''
    1 H$ u7 W% M7 d# o( \+ K6 idata=xlrd.open_workbook(r'亚洲国家疫情数据.xlsx') 8 a( v4 \7 g: N" @5 M& L" h
    table  = data.sheets()[0]   #通过索引顺序获取工作表
    7 Q- h7 g% r/ k2 S/ ccols_n = table.ncols
    8 x. y! o! F4 @& h- v: d0 b0 i. Mcountry_list = table.col_values(0,start_rowx=1) # start_rowx默认为0,设置为1去掉列名
    + z* W, Z! y& @) \  |0 H. U3 ?  f2 }data_list = table.col_values(1,start_rowx=1)1 [9 m8 t/ B+ u( r* ]! A' Q3 u# U
    # print(data_list)
    . ^% U% I0 c. H( U* a, w, v0 I! @
    3 \$ C$ ?& J  u4 X  |'''
    3 E+ U! X2 |. V1 s5 r$ x" F1 t    计算角度
    ! S) n  c# n' p- l  W'''" n7 k& v2 m4 V: m( S0 q3 M
    n = table.nrows-1           #去掉列名
    6 O: E- }/ s1 S6 T) s) |  ltheta = np.linspace(0,2*np.pi,len(data_list))    # 360度等分成n份
    $ E, b2 l0 s0 c3 {6 E1 j  y; p- T5 R0 T+ n" k
    '''0 T) M" |& g( I
        作图8 \( T& y& n: {+ m6 U& m" F
    '''
    # U( C: w. b$ W9 ^# 设置画布
    / C- S. d3 v6 `/ l# [8 }fig = plt.figure(figsize=(12,10))0 N* F* a6 ?$ c9 k  D* w0 j  [8 L
    # 极坐标
    * q0 G, C  [" s& K, u; |ax = plt.subplot(111,projection = 'polar')9 D+ p) |  o/ o: g, K. Z$ [
    # 顺时针并设置N方向为0度
    1 r+ M  X* Y3 r% bax.set_theta_direction(-1)3 O; ^( |: V8 [  Q* t
    ax.set_theta_zero_location('N') 8 r8 {* n. N6 [9 x2 t
    , o$ e3 ~( m) U" g* U& @
    # 在极坐标中画柱形图) l$ o7 b( {; L: E  W  d
    ax.bar(theta,
    & }5 M* p, k+ ]: v% Z        data_list,8 C+ v0 Z2 d+ V! F9 Y; `
            width = 0.33,9 c) h& ^. ^/ U' Q' c
            color = np.random.random((len(data_list),3)),0 l6 y) R8 u+ G, Q0 k9 j* M
            # labels=str(country_list),
    % k1 d4 }: ~# B; ?% p        align = 'edge')
    + r! v% \, \2 u7 G''' * x* Y& A  U0 J/ Y" @' r4 `
        显示一些简单的中文图例
    7 w3 U+ e; @6 L& Q% \& o7 D'''/ V" H% H0 s4 q4 A; T2 ?3 e" Y
    plt.rcParams['font.sans-serif']=['SimHei']  # 黑体
    ) \3 v3 X& o3 l& c( o( |! E# T" xax.set_title('亚洲国家现存确诊',fontdict={'fontsize':20})/ C4 b3 \; {, b/ s
    for angle,data in zip(theta,data_list):) v$ k* b& \9 U: s$ h! W" X
        ax.text(angle+0.03,data+100,str(data))
    ! ?; |3 ?# {& R% `9 {& t+ [) e" \/ |

    ; B5 l! Z) R/ O' S3 Fplt.axis('off')3 U5 U5 J8 A" {. y

    1 E" g2 H  d" y: @( ?& y# Dplt.savefig('Nightingale_rose.png')
    / a" ?! Z# }) c7 v4 y; r) tplt.show()
    2 V! b3 ?% }. X8 a6 k; e
    0 @3 C  q* K5 l& N" d" q' u& x2 j7 S  P
    2.运行结果$ }2 G8 j5 l/ q* [# t" O" R( o
    1.png
    ; G4 r# p% l1 U
    & w. C) O& W# d# ]. D  w7 H' y7 J5 a; ?( Y
    3.excel数据表. V4 l5 ]/ |0 A! [9 W4 Q& {- n2 E4 h
    2.png % E" ]1 y# m" I' `' r

    " V: w7 }. }# ~- n% y: {& }8 S4.说明
    $ ~4 m: q7 |% }  四位数过长,而对应的图所占比例很小,所以在图上的标注有些重叠.
    , Q& X3 X/ g0 B) M* x7 b  实验让画出基础玫瑰图,并没有图例和标签的要求,而且给玫瑰图设置标签的步骤比较繁琐,所以没有涉及到.+ [- L; U- U+ M  F+ ?2 J- g
    ————————————————( h5 G$ p" G# E5 A: x; A
    版权声明:本文为CSDN博主「小兰同学」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
    / F9 M9 M" G; A7 [- {原文链接:https://blog.csdn.net/weixin_42323041/article/details/106263852) ?% U! k* [- f' t

    + M1 ?. p% _+ F* U, g
    ) E2 c0 e  p2 L; K* G
    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-4-20 10:56 , Processed in 0.435218 second(s), 54 queries .

    回顶部