我们说Excel有难度的图表,可以考虑ggplot2是否更方便,本帖的例子就是用ggplot做玫瑰图。
Excel做玫瑰图有一定难度,可以使用雷达图或圆环图来构建,我的博客上曾有多个帖子讨论这个,见
1、已被sohu隐藏
2、已被sohu隐藏
3、圆环图做南丁格尔玫瑰图:http://blog.sina.com.cn/s/blog_6bc5205e0101jk0r.html
但在ggplot2中做这个图表类型却是非常的简单方便。

#读入你的数据。还是使用以前例子的数据,如下图:

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
 
#使用极坐标,柱形图被像折扇子一样折叠为玫瑰图了,真是1秒钟变玫瑰图!太方便了,想起当时在Excel费老大劲折腾,不堪回首中......
p +  coord_polar()
#这个内置的颜色不太好,使用更好的颜色:
p +  coord_polar() + scale_fill_brewer(palette="Blues")

#去掉背景:
p +  coord_polar() + scale_fill_brewer(palette="Blues") + theme_bw()

#现在是比较重要的一步优化,由于中心部分太小,挤在一起很难以看清,如何实现象例图中的中间留空?尝试把y轴最小值设置为-0.4看看:
 
p +  coord_polar() + scale_fill_brewer(palette="Blues") + theme_bw() + ylim(-0.4,1)
 
 
#在中心空白处画个圆圈作为玫瑰图的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)

#现在可以去除坐标轴、网格线等,使图表更清晰,并在中心加文字。最后的代码就以下几行,非常简单。
 
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)
现在玫瑰图基本已经完成,后续可导入AI继续编辑和添加各种标签。
 
回头看看,如果不使用极坐标,把图表还原为普通的柱形图,就是如下的样子。这其实比玫瑰图更好比较。不过,大众读者可能更喜欢看起来新颖、高级的样式吧,也无可厚非。

本例笔记完。
 
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——饼图篇,两者类似。

R笔记4:ggplot绘制商务图表--玫瑰图的更多相关文章

  1. 【R笔记】R语言函数总结

    R语言与数据挖掘:公式:数据:方法 R语言特征 对大小写敏感 通常,数字,字母,. 和 _都是允许的(在一些国家还包括重音字母).不过,一个命名必须以 . 或者字母开头,并且如果以 . 开头,第二个字 ...

  2. Origin9.1如何绘制风向玫瑰图(Binned Data)?

    Origin9.1如何绘制风向玫瑰图(Binned Data)? 时间:2014/5/14 21:02:44 点击: 2624 核心提示:今天为大家介绍下如何使用Origin9.1绘制如下图所示的风向 ...

  3. Origin9.1如何使用原始数据(Raw Data)绘制风向玫瑰图

    核心提示:今天为大家简单介绍下如何使用原始数据绘制风向玫瑰图.本例以Origin 9.1进行演示.1.本例所用数据截图如下,列A为风向,列B为风速.2.选中两列数据,进入Plot下的Specializ ...

  4. 使用highcharts 绘制Web图表

    问题描述:     使用highcharts 绘制Web图表 Highcharts说明: 问题解决:     (1)安装Highcharts     在这些图表中,数据源是一个典型的JavaScrip ...

  5. R笔记(1):formula和Formula

    #####开一个新的系列.关于R的一些笔记,就是遇到过的一些问题的简单整理.可能很基本,也可能没什么大的用处,作为一个记录而已.------------------------------------ ...

  6. Python使用plotly绘制数据图表的方法

    转载:http://www.jb51.net/article/118936.htm 本篇文章主要介绍了Python使用plotly绘制数据图表的方法,实例分析了plotly绘制的技巧. 导语:使用 p ...

  7. 利用ichart绘制网页图表

    首先,最好的教程在这里:ichartjs 有了这个网站,要绘制网页图表简直方便愉快! 接下来说一下使用方法~~~ 进入网站,点击在线设计器 在线设计器的使用方法就不说了,摸索一下就会了!关键在于两个地 ...

  8. R中绘制聚类的离散图

    R中利用cluster简单的绘制常见聚类离散图 # 引入cluster库(clara.fanny) library(cluster) # 聚类散点图绘制 # 引入factoextra,cluster库 ...

  9. Qt绘制简单的风向玫瑰图代码

    1.绘制简单的风向玫瑰图代码2.主要使用QPainter3.在子widget上绘制需要使用widget监视事件 eventfilter update();//更新界面 //镜头12 QPainter ...

随机推荐

  1. python学习笔记——multiprocessing 多进程中的重构方法__init__

    重构: import multiprocessing import time class ClockProcesses(multiprocessing.Process): def __init__(s ...

  2. Linux内核(5) - 内核学习的相关资源

    “世界上最缺的不是金钱,而是资源.”当我在一份报纸上看到这句大大标题时,我的第一反应是——作者一定是个自然环保主义者,然后我在羞愧得反省自身的同时油然生出一股对这样的无产主义理想者无比崇敬的情绪来. ...

  3. Struts如何获取客户端ip地址

    在JSP里,获取客户端的IP地址的方法是:request.getRemoteAddr(),这种方法在大部分情况下都是有效的.但是在通过了Apache,Squid等反向代理软件就不能获取到客户端的真实I ...

  4. puppeteer (Nodejs版selenium )快速入门

    官网 https://pptr.dev/ api 与 教程: https://github.com/GoogleChrome/puppeteer/blob/master/docs/api.mdhttp ...

  5. python标准库介绍——26 getopt 模块详解

    ==getopt 模块== ``getopt`` 模块包含用于抽出命令行选项和参数的函数, 它可以处理多种格式的选项. 如 [Example 2-23 #eg-2-23] 所示. 其中第 2 个参数指 ...

  6. unity, texture import settings

    如果图片带透明通道,则若勾选Alpha Is Transparency,图片会呈现透明的预览效果.   但Alpha Is Transparency勾选与否是否影响shader的输出效果目前我还不太清 ...

  7. 给openvpn客户分配固定ip地址

    虽然openvpn提供dhcp服务,但是dhcp是有租约的,到期后会重新分配ip,造成连接中断的问题,所以最好还是给客户端固定一个ip. 思路:开启客户端配置目录,然后为每一个客户建一个配置文件,里面 ...

  8. 批处理学习笔记1 - Hellow World

    记录自己学习批处理的一点总结吧. 批处理的好处: 可以配合vs,在build完文件之后执行自己的批处理命令. 可以批量修改文件名,或者进行复杂的查询等,对文件可编程操作. 从Hellow world开 ...

  9. [k8s]prometheus+grafana监控node和mysql(普罗/grafana均vm安装)

    https://github.com/prometheus/prometheus Architecture overview Prometheus Server Prometheus Server 负 ...

  10. 【Android】20.0 第20章 音频、视频、拍照、语音合成

    分类:C#.Android.VS2015: 创建日期:2016-03-11 一.简介 Android提供了常见的多媒体文件编码.解码机制,你可以直接调用Android提供的API,实现相册.播放器.录 ...