• R笔记4:ggplot绘制商务图表--玫瑰图


    我们说Excel有难度的图表,可以考虑ggplot2是否更方便,本帖的例子就是用ggplot做玫瑰图。
    Excel做玫瑰图有一定难度,可以使用雷达图或圆环图来构建,我的博客上曾有多个帖子讨论这个,见
    1、已被sohu隐藏
    2、已被sohu隐藏
    3、圆环图做南丁格尔玫瑰图:http://blog.sina.com.cn/s/blog_6bc5205e0101jk0r.html
    但在ggplot2中做这个图表类型却是非常的简单方便。
    R笔记4:ggplot绘制商务图表--玫瑰图
    #读入你的数据。还是使用以前例子的数据,如下图:
    R笔记4:ggplot绘制商务图表--玫瑰图
    rose <- read.csv("c:/rstudy/rose.csv")
     
    #转换为长表
    library(reshape2)
    rose_long <- melt(rose,id.vars="取值",variable.name="维度",value.name="count")
     
    #如果直接做堆积柱形图是这样的
    library(ggplot2)
    p <- ggplot(rose_long,aes(x=维度, y=count, fill=取值))+ geom_bar(stat="identity",color="black")
    p
    R笔记4:ggplot绘制商务图表--玫瑰图
     
    #使用极坐标,柱形图被像折扇子一样折叠为玫瑰图了,真是1秒钟变玫瑰图!太方便了,想起当时在Excel费老大劲折腾,不堪回首中......
    p +  coord_polar()
    R笔记4:ggplot绘制商务图表--玫瑰图
    #这个内置的颜色不太好,使用更好的颜色:
    p +  coord_polar() + scale_fill_brewer(palette="Blues")
    R笔记4:ggplot绘制商务图表--玫瑰图
    #去掉背景:
    p +  coord_polar() + scale_fill_brewer(palette="Blues") + theme_bw()
    R笔记4:ggplot绘制商务图表--玫瑰图
    #现在是比较重要的一步优化,由于中心部分太小,挤在一起很难以看清,如何实现象例图中的中间留空?尝试把y轴最小值设置为-0.4看看:
     
    p +  coord_polar() + scale_fill_brewer(palette="Blues") + theme_bw() + ylim(-0.4,1)
     
    R笔记4:ggplot绘制商务图表--玫瑰图
     
    #在中心空白处画个圆圈作为玫瑰图的x轴起点线,以及在外圈画个圆,使图表看起来更圆润。
    p +  coord_polar() + scale_fill_brewer(palette="Blues") + theme_bw() + 
         ylim(-0.4,1.1)+ geom_hline(yintercept=0) + geom_hline(yintercept=1.1)
    R笔记4:ggplot绘制商务图表--玫瑰图
    #现在可以去除坐标轴、网格线等,使图表更清晰,并在中心加文字。最后的代码就以下几行,非常简单。
     
    p +  coord_polar() + scale_fill_brewer(palette="Blues") + theme_bw() + 
         ylim(-0.4, 1.1) +
         geom_hline(yintercept = 0) + 
         geom_hline(yintercept = 1.1) +
         theme(
              panel.grid = element_blank(),
              panel.border= element_blank(),
              axis.text.y = element_blank(),
              axis.ticks = element_blank(),
              axis.title = element_blank()
               ) +
         annotate("text",x=1, y=-0.4, label="ExcelPro", fontface="bold", colour="steelblue", size=4)
    R笔记4:ggplot绘制商务图表--玫瑰图
    现在玫瑰图基本已经完成,后续可导入AI继续编辑和添加各种标签。
     
    回头看看,如果不使用极坐标,把图表还原为普通的柱形图,就是如下的样子。这其实比玫瑰图更好比较。不过,大众读者可能更喜欢看起来新颖、高级的样式吧,也无可厚非。
    R笔记4:ggplot绘制商务图表--玫瑰图
    本例笔记完。
     
    ExcelPro图表博客,专注于简单实用、专业有效的商务图表沟通方法。转载请注明出处。
    最新商业图表案例教程见第1季、第2季,属于中高级程度,适合对图表品质要求高的朋友。提供xlsx源文件+pdf图文教程+在线视频演示3合1课程。
    --------------------------------------
     
     

    更多内容请见:R、ggplot2、shiny 汇总

    初始图样:

    library(ggplot2)
    dt = data.frame(A = c(2, 7, 4, 10, 1), B = c('B','A','C','D','E'))
    windowsFonts(myFont = windowsFont("楷体"))   ## 绑定字体
    
    p = ggplot(dt, aes(x = B, y = A, fill = B)) + 
      geom_bar(stat = "identity", alpha = 0.7) + 
      coord_polar() 
    p
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    这里写图片描述

    修补过后的玫瑰图:

    library(ggplot2)
    dt = data.frame(A = c(2, 7, 4, 10, 1), B = c('B','A','C','D','E'))
    windowsFonts(myFont = windowsFont("楷体"))   ## 绑定字体
    
    p = ggplot(dt, aes(x = B, y = A, fill = B)) + 
      geom_bar(stat = "identity", alpha = 0.7) + 
      coord_polar() + 
      theme_bw() + 
      labs(x = "", y = "", title = "这个玫瑰图有点丑") + 
      geom_text(aes(y = A/2 + max(A)/4, label = A, color = B), size = 5) +    ## 加上数字
      theme(axis.text.y = element_blank()) +    ## 去掉左上角的刻度标签
      theme(axis.ticks = element_blank()) +    ## 去掉左上角的刻度线
      theme(panel.border = element_blank()) +   ## 去掉外层边框
      theme(legend.position = "none") +   ## 去掉图例
      theme(title = element_text(vjust = -56, face = "bold", family = "myFont"))   ## 将图例移到图的下方,并更改一下字体格式
    p
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16

    这里写图片描述

    注:更多修改的细节可见:ggplot2——饼图篇,两者类似。

  • 相关阅读:
    Mysql上手
    Markdown精简版个人语法
    Sublime Text3插件管理
    Eclipse的快捷键
    使用github page 页面建博客中遇到的几个小问题
    2015 圣诞 限免软件分享
    啦啦啦-根据关键字进行字符串拷贝
    使用 sprintf swprintf 函数进行 unicode 与 ANSI 编码的转换
    c++11: 用户定义字面量
    通过模板获取数组长度
  • 原文地址:https://www.cnblogs.com/awishfullyway/p/6505265.html
Copyright © 2020-2023  润新知