加载中…
个人资料
  • 博客等级:
  • 博客积分:
  • 博客访问:
  • 关注人气:
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

[转载]R学习笔记:如何自定义ggplot2中各组数据输出的次序

(2017-08-22 14:54:11)
标签:

转载

今天在用R绘制多组boxplot时碰到一个问题:如何自定义boxplot各组的输出次序?
问题描述:
ups<-read.delim("e:\test.txt");
ups.melt<-melt(ups,id.var="exp");
p<-ggplot(data=ups.melt, aes(x=exp,y=value,fill=variable))+geom_boxplot(alpha=0.8);

p绘制的结果如下:

ups的表头如下:
http://s5/mw690/001m3vjbzy6ZXs2uBIE54&690
输入str(ups)查看其数据类型:
可以发现ups$exp的因子水平是按照默认的ASCII码排序的,boxplot输出的次序是:UPS2mouse, UPS2only, UPS2yeast
但是我想要的次序是UPS2only, UPS2yeast, UPS2mouse,因此需要重新定义exp的因子水平
这里只需调整melt之后的因子水平即可:

ups.melt$exp=factor(ups.melt$exp, levels=c("UPS2only","UPS2yeast","UPS2mouse")); #修改exp的因子水平顺序,从而确定X轴输出的顺序

调整后再运行ggplot2的绘图命令:

p<-ggplot(data=ups.melt, aes(x=exp,y=value,fill=variable))+geom_boxplot(alpha=0.8);

结果如下:

==================================================================
下面转载一个相关的帖子:  

初始图样:


library(ggplot2)
library(ggthemes)
dt = data.frame(obj = c('A','D','B','E','C'), val = c(2,15,6,9,7))
p = ggplot(dt, aes(x = obj, y = val, fill = obj, group = factor(1))) + 
    geom_bar(stat = "identity") +
    theme_economist()

http://img.blog.csdn.net/20150819231056354

 


 

如何修改柱条的宽度:


library(ggplot2)
library(ggthemes)
dt = data.frame(obj = c('A','D','B','E','C'), val = c(2,15,6,9,7))
p = ggplot(dt, aes(x = obj, y = val, fill = obj, group = factor(1))) + 
    geom_bar(stat = "identity", width = 0.5) +   ## 修改柱条的宽度
    theme_economist()

http://img.blog.csdn.net/20150820001948284

  

如何修改柱条的顺序:


library(ggplot2)
library(ggthemes)
dt = data.frame(obj = c('A','D','B','E','C'), val = c(2,15,6,9,7))
dt$obj = factor(dt$obj, levels=c('D','B','C','A','E'))   ## 设置柱条的顺序
p = ggplot(dt, aes(x = obj, y = val, fill = obj, group = factor(1))) + 
    geom_bar(stat = "identity", width = 0.5) +   ## 修改柱条的宽度
    theme_economist()

## 特注:dt$obj 是因子类型,ggplot2作图的顺序就是按照这个因子水平的顺序来的,
## 所以我们修改因子水平的顺序即可修改作图的顺序,具体情况可以输出一下 dt$obj 。

http://img.blog.csdn.net/20150820002706663

 


 

如何在柱条上添加文字:


library(ggplot2)
library(ggthemes)
dt = data.frame(obj = c('A','D','B','E','C'), val = c(2,15,6,9,7))
dt$obj = factor(dt$obj, levels=c('D','B','C','A','E'))   ## 设置柱条的顺序
p = ggplot(dt, aes(x = obj, y = val, fill = obj, group = factor(1))) + 
    geom_bar(stat = "identity", width = 0.5) +   ## 修改柱条的宽度
    theme_economist() + 
    geom_text(aes(label = val, vjust = -0.8, hjust = 0.5, color = obj), show_guide = FALSE) +   ## 显示柱条上的数字
    ylim(min(dt$val, 0)*1.1, max(dt$val)*1.1)   ## 加大 Y 轴的范围,防止数字显示不齐全

http://img.blog.csdn.net/20150820004010656


0

  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有