• R绘图 第八篇:绘制饼图(ggplot2)


    geom_bar()函数不仅可以绘制条形图,还能绘制饼图,跟绘制条形图的区别是坐标系不同,绘制饼图使用的坐标系polar,并且设置theta="y":

    coord_polar(theta = "y", start = 0, direction = 1, clip = "on")

    条形图的高度通常表示两种情况之一:每组中的数据的个数,或数据框中列的值,高度表示的含义是由geom_bar()函数的参数stat决定的,stat在geom_bar()函数中有两个有效值:count和identity。默认情况下,stat="count",这意味着每个条的高度等于每组中的数据的个数,并且,它与映射到y的图形属性不相容,所以,当设置stat="count"时,不能设置映射函数aes()中的y参数。如果设置stat="identity",这意味着条形的高度表示数据数据的值,而数据的值是由aes()函数的y参数决定的,就是说,把值映射到y,所以,当设置stat="identity"时,必须设置映射函数中的y参数,把它映射到数值变量。

    geom_bar()函数的定义是:

    geom_bar(mapping = NULL, data = NULL, stat = "count",fill=NULL, position="stack")

    参数注释:

    • stat:设置统计方法,有效值是count(默认值) 和 identity,其中,count表示条形的高度是变量的数量,identity表示条形的高度是变量的值;
    • position:位置调整,有效值是stack、dodge和fill,默认值是stack(堆叠),是指两个条形图堆叠摆放,dodge是指两个条形图并行摆放,fill是指按照比例来堆叠条形图,每个条形图的高度都相等,但是高度表示的数量是不尽相同的。
    • fill:条形图的填充色

    关于stat参数,有三个有效值,分别是count、identity和bin:

    • count是对离散的数据进行计数,计数的结果用一个特殊的变量..count.. 来表示,
    • bin是对连续变量进行统计转换,转换的结果使用变量..density..来表示
    • 而identity是直接引用数据集中变量的值

    position参数也可以由两个函数来控制,参数vjust和widht是相对值:

    position_stack(vjust = 1, reverse = FALSE)
    position_dodge(width = NULL)
    position_fill(vjust = 1, reverse = FALSE)

    本文使用vcd包中的Arthritis数据集来演示如何创建条形图。

    head(Arthritis)
      ID Treatment  Sex Age Improved
    1 57   Treated Male  27     Some
    2 46   Treated Male  29     None
    3 77   Treated Male  30     None
    4 17   Treated Male  32   Marked
    5 36   Treated Male  46   Marked
    6 23   Treated Male  58   Marked

    其中变量Improved和Sex是因子类型,ID和Age是数值类型。

    一,绘制一个条形图

    绘制一个饼图之前,需要绘制一个条形图,该条形图有多个分组,这就需要设置映射的x参数映射为一个常量因子,fill映射为分类因子:

    ggplot(data=Arthritis, mapping=aes(x="Improved",fill=Improved))+
      geom_bar(stat="count",width=0.5,position='stack')

    在条形图之后,添加一个图层,把条形图转换为饼图:

    ggplot(data=Arthritis, mapping=aes(x="Improved",fill=Improved))+
      geom_bar(stat="count",width=0.5,position='stack')+
      coord_polar("y", start=0)

    二,调整饼图的图形属性

    调整饼图的填充色,文本,使饼图看起来更加美观。

    1,调整饼图的填充色

     使用scale_fill_manual()函数对饼图填充不同的颜色

    ggplot(data=Arthritis, mapping=aes(x="Improved",fill=Improved))+
      geom_bar(stat="count",width=0.5,position='stack')+
      coord_polar("y", start=0)+
      scale_fill_manual(values=c("#999999", "#E69F00", "#56B4E9"))

    2,调整饼图的标度

    blank_theme <- theme_minimal()+
      theme(
        axis.title.x = element_blank(),
        axis.title.y = element_blank(),
        axis.text.x = element_blank(),
        axis.text.y = element_blank(),
        panel.border = element_blank(),
        panel.grid=element_blank(),
        axis.ticks = element_blank(),
        plot.title=element_text(size=14, face="bold")
      )
    
    ggplot(data=Arthritis, mapping=aes(x="Improved",fill=Improved))+
      geom_bar(stat="count",width=0.5,position='stack',size=5)+
      coord_polar("y", start=0)+
      scale_fill_manual(values=c("#999999", "#E69F00", "#56B4E9"))+
      blank_theme +
      geom_text(stat="count",aes(label = scales::percent(..count../100)), size=4, position=position_stack(vjust = 0.5))

    也可以使用stat="identity" 方式来绘制饼图,绘制的图形是相同的:

    mytable <- with(Arthritis,table(Improved))
    df <- as.data.frame(mytable)
    
    blank_theme <- theme_minimal()+
      theme(
        axis.title.x = element_blank(),
        axis.title.y = element_blank(),
        axis.text.x = element_blank(),
        axis.text.y = element_blank(),
        panel.border = element_blank(),
        panel.grid=element_blank(),
        axis.ticks = element_blank(),
        plot.title=element_text(size=14, face="bold")
      )
    
    ggplot(data=df, mapping=aes(x="Improved",y=Freq,fill=Improved))+
      geom_bar(stat="identity",width=0.5,position='stack',size=5)+
      coord_polar("y", start=0)+
      scale_fill_manual(values=c("#999999", "#E69F00", "#56B4E9"))+
      blank_theme +
      geom_text(stat="identity",aes(y=Freq, label = scales::percent(Freq/100)), size=4, position=position_stack(vjust = 0.5))

    参考文档:

    ggplot2 pie chart : Quick start guide - R software and data visualization

    Polar coordinates

    ggplot, facet, piechart: placing text in the middle of pie chart slices

  • 相关阅读:
    12.3
    团队项目第一阶段冲刺第一天
    4.22
    4.21 re重要功能
    12.1
    12.2
    4.17
    4.16
    css设置子元素相对于父元素保持位置不变(含有滚动条的父元素)
    git操作和npm操作清单
  • 原文地址:https://www.cnblogs.com/ljhdo/p/4514106.html
Copyright © 2020-2023  润新知