QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 7416|回复: 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
    4 J$ r1 h. o! ]$ F
    python+matplotlib绘制南丁格尔玫瑰图
    # O- j$ s, [# p7 N6 K& c实验:绘制南丁格尔玫瑰图' v" b' r: }  ]- K* U- u
      本实验有一定难度,有人说matplotlib绘图和matlab大同小异,我看除了一些函数名相同之外,其他的像参数和使用方法很不一样.另外我不知道是不是在matlab中画玫瑰图直接一个"肉丝"函数就成了,为什么matplotlib里面没有~~+ _8 `) W5 m/ C: Z7 Z
      无论如何还是感谢本次实验,虽然费了点时间但是我对函数画图有了一定深度的了解和掌握,草草在python之matplotlib库重要绘图函数简介里面记录了一下,因为内容太多没有一一写成博文,但是附加了一些别人博客的链接,还是很有帮助的.6 R3 ~9 ~  ]& ]3 l6 D, l" r7 E

    1 N. ^7 K0 n8 J9 v4 G: q文章目录0 Y: l' ]* ]* e4 Q  j) n

    ! H6 q% A9 X& ?, Q2 \$ y6 O一、实验目的
    4 Y, [' X8 y1 H8 @4 p0 B' X2 w二、实验内容
    % O0 j7 e1 |$ n9 O0 {三、实验环境
    & Q7 o) y% ?' J) D/ [$ A四、实验步骤2 P! w7 L8 L- n$ {
    五、实验代码及测试
    9 u" w% v, {' L2 C1.源代码
    2 `& j* u2 Q% i. f2 L6 X# D2.运行结果7 [6 y9 m* T: X" l2 m( V
    3.excel数据表
    & w% o" [% F; G1 ^- h* F' t, {% k一、实验目的# A+ F4 c* t) l2 O  E0 w

    ( w! n9 \+ Z3 w  @  了解玫瑰图的前世今生;了解matplotlib标准库中的pyplot模块;了解在极坐标系中绘制柱状图。
    * ?2 c: n( _7 r4 [
    8 x; p4 u. z/ V二、实验内容$ C5 j2 l4 n  k
    4 }, d. A% {8 D% r4 P: i& C
      南丁格尔玫瑰图(Nightingale rose diagram)又名鸡冠花图(Coxcomb Chart)或极坐标区域图(Polar area diagram)。它将柱图转化为更美观饼图形式,是极坐标化的柱图。不同于饼图用角度表现数值或占比,南丁格尔玫瑰图使用扇形的半径表示数据的大小,各扇形的角度则保持一致。
    & t0 ~4 V8 A' w1 ?0 p! q  自行选择一组数据,画出基础玫瑰图。
    + a! p+ c2 L5 d6 d4 Z: J: A" L% {& z9 m6 y" @' o8 y0 q/ t0 E
    三、实验环境2 L8 I5 J; }3 \7 U: U+ s

    * k( R  J6 o( s  ^; u' t& W  ython 3.8
    6 i' }# V. |$ ?! v, U9 R( j- u: }: R$ e; s
    四、实验步骤
    . A$ K6 J4 X# e1 }. o0 A; K% b  T9 f* |/ i" l- p# h0 U& X
    查阅文档,了解南丁格尔玫瑰图的原理。, s7 N9 t* C9 N
    选择一组数据,编写程序画出玫瑰图。0 S8 X4 v- ^3 A
    五、实验代码及测试# {, I; B3 _" e% i( o, ^) @
    1 J  [, X$ X! _2 `" d2 L
    1.源代码
    7 p/ l4 \2 e& D+ t+ p6 c) j
    & t4 A. ^2 _' F# _# himport matplotlib.pyplot as plt# R8 z- R/ Z" ^  q- i( g
    import numpy as np, @* K+ j% W# u5 P- b% C1 k
    import xlrd9 q; O6 n) b/ k. W8 Z, j/ U
    & x( G- l/ l# t  u
    '''
    3 i9 ]) O- [- n) }$ w$ \    按列读取excel文件并存入两个列表' B! r. X. U7 G/ n2 X
    '''. }$ J1 m- S3 K( M1 s  K0 r
    data=xlrd.open_workbook(r'亚洲国家疫情数据.xlsx') ' A( b' m+ s) O
    table  = data.sheets()[0]   #通过索引顺序获取工作表9 c3 [* i# f5 P& `
    cols_n = table.ncols
    + T8 M. G: Z* P* p4 jcountry_list = table.col_values(0,start_rowx=1) # start_rowx默认为0,设置为1去掉列名
    3 r' m+ b/ A$ h9 {8 T! N9 ydata_list = table.col_values(1,start_rowx=1)+ d. K5 u5 Z1 S  t  W
    # print(data_list)- j# @  g2 L( C! X

    , B4 r9 s/ P& N" ?+ X& k" U  a& d'''
    2 ~, Z) _! E1 K1 S8 @9 x/ L! a/ P5 Y: t+ }    计算角度( F/ b  w+ T' O( W
    '''
    + K% l3 ]: N7 nn = table.nrows-1           #去掉列名$ A2 j8 F: L& o0 G
    theta = np.linspace(0,2*np.pi,len(data_list))    # 360度等分成n份
    2 J% X6 n7 u# m
    2 }% T! F5 L( L7 d( i1 F- t'''9 y. z0 q/ U+ {4 j3 b
        作图4 A* {" q  A9 J* Y1 w' k
    '''
    2 Z+ M9 E8 D) F' Y9 [- ]# 设置画布
    + u( {3 H  C7 Z) U5 Sfig = plt.figure(figsize=(12,10))
    5 C- x4 B1 p9 e/ [# 极坐标
    4 ?! V! K% M, n9 x+ Z: a% x% S; uax = plt.subplot(111,projection = 'polar')
    & b" ?; U/ n; }- M1 i* A4 a# 顺时针并设置N方向为0度( S+ `  M( M7 B( G6 D& S1 G
    ax.set_theta_direction(-1)
    7 w3 l6 o5 x" j# u4 f+ n; Q9 h. lax.set_theta_zero_location('N')
    ) y3 P: `, K2 u0 p
    5 I$ B( X! R& N4 T- m$ S! h9 b# 在极坐标中画柱形图
    : N/ G! j" r! `4 iax.bar(theta,' I2 [8 F3 I: ~9 A2 X: Y4 E
            data_list,/ t+ c+ [, W+ |8 r' m- Q
            width = 0.33,
    % A$ s, ?4 a* A        color = np.random.random((len(data_list),3)),
    8 F% f3 ]% l: R9 `( u        # labels=str(country_list),
    - S) t" f. t" t        align = 'edge')- u! H' l5 ~9 `; R6 C4 H
    ''' 3 p/ V4 T2 }3 l3 C9 ?
        显示一些简单的中文图例$ {; _) l' W( ]; Y" q
    '''! z' S4 x/ ~9 B) q
    plt.rcParams['font.sans-serif']=['SimHei']  # 黑体4 ~4 Q6 @# N8 R# X8 X
    ax.set_title('亚洲国家现存确诊',fontdict={'fontsize':20})0 W$ O0 @; B+ I; F9 _4 ]: q) R
    for angle,data in zip(theta,data_list):
    8 K2 }3 P) |4 }# R0 A/ t6 H    ax.text(angle+0.03,data+100,str(data)) * |5 P+ t9 D) p" [

    . r2 Z# m0 n1 b! r; F; J0 \- s6 Y* k3 _5 n- R
    plt.axis('off')
    4 g: @+ \7 ^) e
    / k# Q" }" X; {' B$ _plt.savefig('Nightingale_rose.png')
    " o) r& u6 V6 f1 n0 P, Eplt.show()% R8 [2 O5 Z2 `/ f, N9 x
    0 a: h  c3 o2 i' a7 ?$ ?
    & k4 _9 c1 f5 a0 |" H8 W1 b2 v0 S
    2.运行结果
    ) E8 b1 Y5 d6 h+ V) I: U: c 1.png ( g5 R- @( Q8 g2 b
    & _' k0 ^# k3 z$ R& L+ j
    9 A- {2 {* N/ Q, |
    3.excel数据表, \& v+ Q) `; u8 D" z+ d
    2.png : a+ Y' F9 n6 W2 @
    " Z) j7 v8 Y9 E$ s; D. w
    4.说明
    4 ]7 C% @5 M. C- R. R# o& h" Q  四位数过长,而对应的图所占比例很小,所以在图上的标注有些重叠.
    , f/ M9 `: [  |, x! t: K# X  实验让画出基础玫瑰图,并没有图例和标签的要求,而且给玫瑰图设置标签的步骤比较繁琐,所以没有涉及到.3 [) P: R1 s0 T4 |- p  o
    ————————————————0 y$ E5 A8 u1 x" u/ G' Q
    版权声明:本文为CSDN博主「小兰同学」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。/ x; c) x! {# r) c  r7 f9 u2 r- v
    原文链接:https://blog.csdn.net/weixin_42323041/article/details/106263852* _' h& s2 o5 J$ h7 d- b
    ! W: P4 [, c& y
    ' p; V( y6 _7 o7 x( 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-8-18 01:27 , Processed in 0.470025 second(s), 53 queries .

    回顶部