QQ登录

只需要一步,快速开始

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

    2 J% \# r! C! ^" [: E/ |  kpython+matplotlib绘制南丁格尔玫瑰图. ~( u" H, U! ]' Z; M' d* p# f. }
    实验:绘制南丁格尔玫瑰图
    ( e0 ?( f! P& r  本实验有一定难度,有人说matplotlib绘图和matlab大同小异,我看除了一些函数名相同之外,其他的像参数和使用方法很不一样.另外我不知道是不是在matlab中画玫瑰图直接一个"肉丝"函数就成了,为什么matplotlib里面没有~~1 o; A4 X8 Z" b8 D. R1 o: Z, g
      无论如何还是感谢本次实验,虽然费了点时间但是我对函数画图有了一定深度的了解和掌握,草草在python之matplotlib库重要绘图函数简介里面记录了一下,因为内容太多没有一一写成博文,但是附加了一些别人博客的链接,还是很有帮助的.. K! U) ~& j+ r3 v

    * w3 ?( V# ^2 K/ Z1 `- n' r文章目录7 l% {8 }7 g# l4 K3 z7 A
    0 ~" S8 `, N4 g
    一、实验目的
    2 h( ?; q0 a% s二、实验内容! \% {$ T: y7 J9 ]$ L
    三、实验环境3 b( c1 L# p/ k( [/ \2 [9 t
    四、实验步骤
    + x( Q, i: U' F' S五、实验代码及测试
    # C- i* N2 z: \1 A$ W% |1.源代码2 ?2 {' P8 {8 e) U$ ^) p
    2.运行结果
    5 i* ?* b- N. F$ i4 B3.excel数据表1 B; m9 `6 [8 r# s: D' Q( ~
    一、实验目的
    % ?4 H9 ?* N8 c( Q' S' ?1 t" n( N3 l, a
      了解玫瑰图的前世今生;了解matplotlib标准库中的pyplot模块;了解在极坐标系中绘制柱状图。
    2 R8 Q. \. |' H2 x
    , o6 Q) U! u/ H: P) ~$ `二、实验内容5 `3 e* W! J; ~! s

    3 e6 U8 [" A. g$ A; O  南丁格尔玫瑰图(Nightingale rose diagram)又名鸡冠花图(Coxcomb Chart)或极坐标区域图(Polar area diagram)。它将柱图转化为更美观饼图形式,是极坐标化的柱图。不同于饼图用角度表现数值或占比,南丁格尔玫瑰图使用扇形的半径表示数据的大小,各扇形的角度则保持一致。
    & G, L8 H- k% |* w3 [  自行选择一组数据,画出基础玫瑰图。
    ( T% G% |3 F" W6 w. s" @. v+ q, G/ r& S) Z+ d! R: O
    三、实验环境* R7 l" x9 H" M6 e5 A
      M( t  `! b1 {8 V& \3 J
      ython 3.8- [2 x8 `1 U$ ?% G* X3 T

    9 c5 ~" G5 L3 x  ^2 S四、实验步骤7 s; n" e; N1 e6 O
    : c2 o. F) h& Y; L, |. n. N9 S
    查阅文档,了解南丁格尔玫瑰图的原理。, ]) O- U3 ^5 I( l3 }
    选择一组数据,编写程序画出玫瑰图。
    - I+ X$ }, C3 {; x五、实验代码及测试( R: A  L. b! U
    + O* ~2 ?) V% v, H4 S+ b; `
    1.源代码( |9 T8 n( I& b$ y5 ^9 j

    7 W* U' V# [1 d+ \4 w1 ]; Rimport matplotlib.pyplot as plt  g6 n. Y6 o5 b$ u% `3 w; f
    import numpy as np
    & y& h5 L- K& o; p" c8 X& `import xlrd! Y9 d$ r" G6 y' g

    - ~* g- u8 S4 u/ ]6 |! G6 b+ O'''
    " h" @; k% o: N+ ]. Q+ X: W$ s/ e    按列读取excel文件并存入两个列表
    4 t- D7 p+ u5 O1 N( m'''
      [7 a# m2 `& H' h& Kdata=xlrd.open_workbook(r'亚洲国家疫情数据.xlsx') . K! ?% m6 a6 G7 m7 u% N, X* ?% f# V$ i
    table  = data.sheets()[0]   #通过索引顺序获取工作表6 l  F2 m! o, R6 S0 M- p9 _5 I
    cols_n = table.ncols
    4 w- ^1 |. P; p1 h% h' @country_list = table.col_values(0,start_rowx=1) # start_rowx默认为0,设置为1去掉列名% i" r+ H9 @% [( ?( ?. e; X' `
    data_list = table.col_values(1,start_rowx=1)
    1 v: W) T/ x7 p0 z6 ?# print(data_list)9 {4 a' m/ [$ G8 X0 B8 q# {

    . E) x3 T1 K" j& S'''1 M  g8 x, G1 `! q2 G7 Z
        计算角度
    0 X& z) t$ A" _" x'''2 w8 g+ D3 ~8 x$ m' O* V* e8 ]
    n = table.nrows-1           #去掉列名" q% G3 D% x1 |2 @7 O* m, O
    theta = np.linspace(0,2*np.pi,len(data_list))    # 360度等分成n份
    % X5 k8 ?( O8 k& g  h
    : z$ E4 T7 ]9 ^- W0 q* S6 A'''
    ' V; ?" ~2 k, z  u7 U    作图; Y! G) x/ a8 a( v5 D; b& ^- s" M8 _
    ''', I7 @3 Z5 h7 ?4 b
    # 设置画布4 f- ~3 s% M" r, {
    fig = plt.figure(figsize=(12,10)). I  S4 Y, e( |+ o* Z* r9 [0 q2 ^
    # 极坐标
    8 i' _" c0 `2 c9 C% S, A0 xax = plt.subplot(111,projection = 'polar')
    6 G  [, M% O  U0 l$ u, g+ F% P# 顺时针并设置N方向为0度6 |$ c+ _* d' c3 ]+ G# p
    ax.set_theta_direction(-1)
    - i* J! C. Z8 O$ l* pax.set_theta_zero_location('N') 2 l9 x7 F7 K9 Z
    4 t! E6 S# \' X( k
    # 在极坐标中画柱形图
    : I) \! ?0 h0 j/ a! x9 Oax.bar(theta,
    $ N6 I: G; |: ~' b        data_list,
    6 N1 p7 m7 S( A) Z4 l" \        width = 0.33,/ x8 r* m% S, S) D6 p: |2 C
            color = np.random.random((len(data_list),3))," C) ^9 e% f4 M$ ?& y. I$ k  F
            # labels=str(country_list),
    / g5 d8 r3 @3 }! G& x/ T        align = 'edge'). L6 c7 l6 e( h& m" J8 ?4 S& g& `
    '''
    5 b( s& d8 H6 l& Z" j4 O: T    显示一些简单的中文图例1 y3 |5 D1 [, ]+ q1 o
    '''6 Y9 x$ {! h' j/ B
    plt.rcParams['font.sans-serif']=['SimHei']  # 黑体
    3 j3 ~. T& o" F4 hax.set_title('亚洲国家现存确诊',fontdict={'fontsize':20})4 O  ?: i9 A% c# g7 l! D' k
    for angle,data in zip(theta,data_list):
    , m. `6 t# A0 ?6 N5 a    ax.text(angle+0.03,data+100,str(data))
    $ K( L5 s6 l, Z* A/ G) h
    / h; R0 Q0 j. J. i8 k8 k# {6 _9 g9 n1 o) Z3 ]' ~" l0 ?7 e
    plt.axis('off')+ w& V  w4 C$ n$ \
    # K- \( g; z) H$ j  L! T
    plt.savefig('Nightingale_rose.png')2 V' L0 k* ~$ u6 T
    plt.show()
    ( p1 R. U$ K6 O' z, K! J
    6 K0 x- O' n/ w7 S, x2 h9 o
    6 j% z5 Q, k0 e# f2.运行结果! H# K# s! Y- i) [. A. u" V$ i
    1.png ; g7 y7 o' l' \( m) b4 B8 Z  q

    , K3 K. X# m2 K/ }) O* B5 A+ A! {) c: X9 R" W9 `! u# {7 m) |
    3.excel数据表% v% r7 m# b' c8 l
    2.png
    ! O! h( F% o! C7 t- s8 s3 X8 W+ D  f
    + n8 W; E8 ~& |! |0 X! i4.说明# t9 A+ |/ M% M
      四位数过长,而对应的图所占比例很小,所以在图上的标注有些重叠.6 E/ l' H" ]* w! d" P4 q
      实验让画出基础玫瑰图,并没有图例和标签的要求,而且给玫瑰图设置标签的步骤比较繁琐,所以没有涉及到.
    " l0 H, l! _' U% f1 }  U8 A! s; K————————————————7 p+ k0 @! i* i: P2 f7 n2 a
    版权声明:本文为CSDN博主「小兰同学」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。' W4 T3 i$ b; l' o* a) @) P  G
    原文链接:https://blog.csdn.net/weixin_42323041/article/details/106263852
    / N+ V/ Z5 v! f& }: h/ x- u) h4 z9 e' ~

    & B* T% a- G5 z0 M: D5 H, e% O
    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-9-30 18:41 , Processed in 0.355389 second(s), 53 queries .

    回顶部