ggplot2绘图系统——位置调整函数

可以参数position来调整,也有专门的函数position_*系列来设置。

位置函数汇总:

1.排列

并排排列

mean <- runif(12,1,3)
lower <- mean-runif(12,0,2)
upper <- mean+runif(12,0,2)
mydata <- data.frame(group=rep(LETTERS[1:4],each=3),
levels=rep(c('low','middle','high'),4),
mean=mean,lower=lower,upper=upper)
dodge <- position_dodge(width = 0.5)
ggplot(mydata,aes(levels,ymin=lower,ymax=upper,color=as.factor(group)))+
geom_errorbar(position = dodge,width=0.2,size=1.2)+
geom_point(aes(levels,mean),position = dodge,size=4)

堆栈排列

death <- c('胃癌','肺癌','食管癌','肝癌','脑癌')
percent <- c(0.21,0.28,0.09,0.32,0.1)
pro=scales::percent(percent)
cancer <- data.frame(death=death,per=percent,
disease='cancer',prop=pro) ggplot(cancer,aes(x=disease,y=per,fill=death))+
geom_bar(stat = 'identity')+
geom_text(aes(label=prop),
position = position_stack(vjust = 0.5),size=6.5)

2.扰动点

a <- ggplot(mpg,aes(class,hwy))+geom_boxplot()+geom_point()
b <- ggplot(mpg,aes(class,hwy))+geom_boxplot()+
geom_jitter()
c <- ggplot(mpg,aes(class,hwy))+geom_boxplot()+
geom_point(position = 'jitter')
grid.arrange(a,b,c,ncol=3)



上图b和c的扰动方式稍有不同。

3.水平和垂直的调整

包括hjust/vjustposition_nudge等,注意nudge(推动)不能作为postion参数的选项,即不能类似geom_point(position='nudge')

df <- data.frame(x=c(1,3,2,5),y=c('a','b','c','d'))

#在点的原位置添加标签
a <- ggplot(df,aes(x,y))+geom_point()+geom_text(aes(label=y))
#标签向下移动一个单位
b <- ggplot(df,aes(x,y))+geom_point()+geom_text(aes(label=y),
position=position_nudge(y=-0.1))
grid.arrange(a,b,ncol=2)

4.有规则扰动

同样只能作为函数position_jitterdodge使用。

同一组内,红色点只出现在红色盒形上,不会出现在其他位置。

dsub <- diamonds[sample(nrow(diamonds),1000),]
#无规则
a <- ggplot(dsub,aes(x=cut,y=carat,fill=clarity))+
geom_boxplot(outlier.size = 0)+
geom_point(pch=21,position = position_jitter())
#有规则
b <- ggplot(dsub,aes(x=cut,y=carat,fill=clarity))+
geom_boxplot(outlier.size = 0)+
geom_point(pch=21,position = position_jitterdodge()) grid.arrange(a,b,ncol=2)

最新文章

  1. java并发编程(十六)happen-before规则
  2. Chap5: question 35 - 37
  3. Java从零开始学四十二(DOM解析XML)
  4. 谷歌和HTTPS
  5. 将m个苹果放入n个盘子的问题【转】
  6. MFC中状态栏显示鼠标坐标位置
  7. CodeForces 352C. Jeff and Rounding(贪心)
  8. Sqlserver2012 alwayson部署攻略
  9. 关于angularjs+typeahead的整合
  10. ArcGIS API for JavaScript 入门教程[2] 授人以渔
  11. [物理学与PDEs]第2章习题2 质量力有势时的能量方程
  12. centos的nginx如何访问本地共享文件夹的文件 nginx访问404,403问题
  13. Linux下RabbitMQ的安装 开机自启动
  14. CCF-Markdown-201703-3
  15. iOS-SVProgressHUDMaskType
  16. genome repeat sequence | 基因组重复序列
  17. DATASNAP远程方法返回TSTREAM正解(转咏南兄)
  18. SQL Server 2008&mdash;&mdash;SQL命令INSERT
  19. python生成验证码,文字转换为图片-乾颐堂
  20. PMP_PMP考试须知

热门文章

  1. 在 Windows 10 上安装 Coq 库 Mathematical Components
  2. 【二食堂】Beta - 设计和计划
  3. Scrum Meeting 0529
  4. [no code][scrum meeting] Alpha 14
  5. 热身训练1 Calculator
  6. 利用DMA实现采样数据的直接搬运存储
  7. 到底能不能用 join
  8. insertion-sort-list leetcode C++
  9. ARM 链接配置.lds文件学习&lt;转&gt;
  10. js 在浏览器中的event loop事件队列