1、小提琴图

小提琴图可以可视化一组或几组数字变量的分布。

问题:您想制作一个小提琴图来比较不同组的密度估计。用gcookbook包与ggplot2包分别绘制。

解决问题:

使用geom_violin()(图1),由于安装包时出问题,我采用直接式下载安装(网站:https://cran.r-project.org/web/packages/gcookbook/index.html),将就升级了一下ggplot2包(运行update.packages(),它将提示您输入每个可以升级的软件包。如果您希望它不要求就升级所有软件包,请使用ask = FALSE;update.packages(ask = FALSE)):

gcookbook作

 library(gcookbook) # 加载gcookbook包
# 使用 heightweight数据集
hw_p <- ggplot(heightweight, aes(x = sex, y = heightIn,fill=sex))
hw_p +geom_violin()

图:1

默认情况下,小提琴缩放使每一个的总面积是一样的(如果trim = TRUE,然后将其缩放)。可以使用scale = "count"与每个组中的观察数量成比例的比例来缩放面积,而不是相等的面积(图2)。在此示例中,女性小提琴比男性少,因此女性小提琴变得比以前更窄:

library(gcookbook) # 加载gcookbook包
# 使用 heightweight数据集
hw_p <- ggplot(heightweight, aes(x = sex, y = heightIn,fill=sex))
# 比例面积与观测数成比例
hw_p +geom_violin(scale = "count")

图:2

要更改平滑量,请使用调整参数。预设值为1;使用较大的值进行更平滑,使用较小的值进行较不平滑(图3):

# 更平滑
hw_p +geom_violin(adjust = 2)

图:3(a)
# 较平滑
hw_p +geom_violin(adjust = .5) 

图:3(b)

ggplot2作

library(ggplot2)
# 创建一个数据集
data <- data.frame(name=c( rep("A",500), rep("B",500), rep("B",500), rep("C",20), rep('D', 100)  ),value=c( rnorm(500, 10, 5), rnorm(500, 13, 1), rnorm(500, 18, 1), rnorm(20, 25, 4), rnorm(100, 12, 1) )
)
#绘制一个小提琴图
p <- ggplot(data, aes(x=name, y=value, fill=name)) + # fill=name 允许自动为每个组添加一种颜色geom_violin()
p

图:4

借助专用功能,构建小提琴图ggplot2非常简单geom_violin()。除了显示提供摘要统计信息的箱形图外,还可以使用geom_boxplot()一个较小width的框(图5)。

# Libraries
library(ggplot2)
library(dplyr)
library(hrbrthemes)
library(viridis)
# create a dataset
data <- data.frame(name=c( rep("A",500), rep("B",500), rep("B",500), rep("C",20), rep('D', 100)  ),value=c( rnorm(500, 10, 5), rnorm(500, 13, 1), rnorm(500, 18, 1), rnorm(20, 25, 4), rnorm(100, 12, 1) )
)# sample size
sample_size = data %>% group_by(name) %>% summarize(num=n())# Plot
data %>%left_join(sample_size) %>%mutate(myaxis = paste0(name, "n", "n=", num)) %>%ggplot( aes(x=myaxis, y=value, fill=name)) +geom_violin(width=1.4) +geom_boxplot(width=0.1, color="grey", alpha=0.2) +scale_fill_viridis(discrete = TRUE) +theme_ipsum() +theme(legend.position="none",plot.title = element_text(size=11)) +ggtitle("A Violin wrapping a boxplot") +xlab("")

图:6

ggplot2小提琴具体学习请参考

第一个:Violin Chart | the R Graph Gallery

第二个:http://www.sthda.com/english/wiki/ggplot2-violin-plot-quick-start-guide-r-software-and-data-visualization

2、密度图

使用R软件ggplot2软件包创建密度图。使用了函数geom_density()。您也可以使用geom_vline函数为平均值添加一条线。

#数据准备
set.seed(1234)
df <- data.frame(sex=factor(rep(c("F", "M"), each=200)),weight=round(c(rnorm(200, mean=55, sd=5),rnorm(200, mean=65, sd=5))))
head(df)
#绘制基本密度图
library(ggplot2)
# Basic density
p <- ggplot(df, aes(x=weight)) + geom_density()
p

图:1
#添加均值中线
ggplot(df, aes(x=weight))+geom_density(linetype="dashed")

图2

按组更改密度图颜色,计算每组的平均值;更改线条颜色,密度图线颜色可以按性别自动控制:

#计算各组均值
library(plyr)
mu <- ddply(df, "sex", summarise, grp.mean=mean(weight))
head(mu)
#   sex grp.mean
# 1   F    54.70
# 2   M    65.36
# 按组更改密度图线颜色
ggplot(df, aes(x=weight, color=sex)) +geom_density()
# 添加平均线
p<-ggplot(df, aes(x=weight, color=sex)) +geom_density()+geom_vline(data=mu, aes(xintercept=grp.mean, color=sex),linetype="dashed")
p

图3

也可以使用以下功能手动更改密度绘图线的颜色

  • scale_color_manual():使用自定义颜色
  • scale_color_brewer():使用RColorBrewer包中的调色板
  • scale_color_grey():使用灰色调色板
# 使用自定义调色板
p+scale_color_manual(values=c("#999999", "#E69F00", "#56B4E9"))
# 使用调色板
p+scale_color_brewer(palette="Dark2")
# 使用灰色
p + scale_color_grey() + theme_classic()

图4

更改填充颜色

密度图填充颜色可以按性别自动控制:

#按组更改密度图填充颜色(如图5a)
ggplot(df, aes(x=weight, fill=sex)) +geom_density()
#使用半透明填充(图5b)
p<-ggplot(df, aes(x=weight, fill=sex)) +geom_density(alpha=0.4)
p
#添加平均线(图5c)
p+geom_vline(data=mu, aes(xintercept=grp.mean, color=sex),linetype="dashed")

图5a
图5b
图5c

也可以使用以下功能手动更改密度图填充颜色:

  • scale_fill_manual():使用自定义颜色
  • scale_fill_brewer():使用RColorBrewer包中的调色板
  • scale_fill_grey():使用灰色调色板
# 使用自定义调色板(图6a)
p+scale_fill_manual(values=c("#999999", "#E69F00", "#56B4E9"))
# 使用brewer的调色板(图b)
p+scale_fill_brewer(palette="Dark2")
# 使用灰度(图c)
p + scale_fill_grey() + theme_classic()

图6a
图6b
图6c

ggplot2包其他颜色具体看:http://www.sthda.com/english/wiki/ggplot2-colors-how-to-change-colors-automatically-and-manually

更改图例位置

p + theme(legend.position="top")#图例在上
p + theme(legend.position="bottom")#图例在下
p + theme(legend.position="none") # 删除图例

图8 图例在上
图8 图例在下
图8 删除图例

ggplot2包的更多图例请看:ggplot2 legend : Easy steps to change the position and the appearance of a graph legend in R software

组合直方图和密度图

  • 直方图以密度而不是y轴上的计数值绘制
  • 用透明密度图覆盖
# 带有密度图的直方图(图9-1)
ggplot(df, aes(x=weight)) + geom_histogram(aes(y=..density..), colour="black", fill="white")+geom_density(alpha=.2, fill="#FF6666")
# 按组分颜色(图9-2)
ggplot(df, aes(x=weight, color=sex, fill=sex)) + geom_histogram(aes(y=..density..), alpha=0.5, position="identity")+geom_density(alpha=.2) 

图9-1
图9-2

其他类形图例可查看:ggplot2 density plot : Quick start guide - R software and data visualization

参考书籍:《GGPlot2 Essentials for Great Data Visualization in R》,仅学习用

r 语言 ggplot上添加平均值_R语言中ggplot2包作数据分布情况下的统计图实例学习(一)相关推荐

  1. r 语言 ggplot上添加平均值_R语言自定义两种统计量度:平均值和中位数,何时去使用?

    原文链接: http://tecdat.cn/?p=11085​tecdat.cn 最常用的两种统计量度是平均值和中位数.两种度量均指示分布的中心值,即预期大多数数据点所处的值.但是,在许多应用程序中 ...

  2. r 语言 ggplot上添加平均值_技术贴 | R语言:ggplot堆叠图、冲积图、分组分面、面积图...

    点击蓝字↑↑↑"微生态",轻松关注不迷路 利用R语言堆叠图,我们可以将一个项目中所有样品的物种组成展示出来.下面介绍如何利用R语言进行物种组成分析和可视化.过程分为以下几步: 1) ...

  3. r语言ggplot合并图形_R中带有ggplot2的图形

    r语言ggplot合并图形 介绍 (Introduction) R is known to be a really powerful programming language when it come ...

  4. R语言ggplot绘制地图-报错汇总(一)

    R语言ggplot绘制地图-报错汇总 报错两例 报错1: 报错2: 报错两例 在用ggplot绘制地图时出现了两个报错,网上搜索了没有相关说明,虽然解决方式很蠢,但是可能对于出现同样报错的人会有帮助, ...

  5. UA MATH571A QE练习 R语言 非参数回归 上

    UA MATH571A QE练习 R语言 非参数回归上 2014年5月第五题 2015年1月第四题 2015年5月第四题 这一篇介绍2014年5月第五题.2015年1月第四题.2015年5月第四题. ...

  6. r语言变量长度不一致怎么办_R语言实现数据离散化方法总结

    前言 在做数据挖掘模型的时候,我们有时会需要把连续型变量转型离散变量,这种转换的过程就是数据离散化,分箱就是离散化常用的一种方法. 数据离散化处理属于数据预处理的一个过程,R语言在数据处理上有天然的优 ...

  7. R语言为dataframe添加新的数据列(add new columns):使用R原生方法、data.table、dplyr等方案

    R语言为dataframe添加新的数据列(add new columns):使用R原生方法.data.table.dplyr等方案 目录 R语言为dataframe

  8. R语言为dataframe添加新的数据列(横向拼接、Appending columns,Unioning columns):使用R原生方法、data.table、dplyr等方案

    R语言为dataframe添加新的数据列(横向拼接.Appending columns,Unioning columns):使用R原生方法.data.table.dplyr等方案 目录 R语言为dat

  9. R语言为散点图添加凸包(convex hull):数据预处理(创建一个包含每组数据凸包边界的数据集)、ggplot2使用geom_polygon函数为可视化图像添加凸包(convex hull)

    R语言为散点图添加凸包(convex hull):数据预处理(创建一个包含每组数据凸包边界的数据集).ggplot2使用geom_polygon函数为可视化图像添加凸包(convex hull) 目录

最新文章

  1. bezier曲线_Bezier算法
  2. IO:同步,异步,阻塞,非阻塞
  3. mysql修改表结构权限_mysql 修改表结构操作
  4. 241. Different Ways to Add Parentheses
  5. windows server 2008 系列讲座三部曲--在线讲座预告
  6. python学习之wxPython
  7. php 访问url获得返回值,如何在curl php请求中获取数组值作为返回值?
  8. [leetcode]1306. 跳跃游戏 III
  9. 2021年华为Java面经,顺利收获Offer
  10. 如何复制网页上不能复制的文字——三种解决方案
  11. ksz8863调试总线,
  12. VUE下载excel文件
  13. ROBOTSTUDIO学习
  14. 错误Illegal invocation;使用jquery的ajax上传文件报错Illegal invocation
  15. U3D学习项目一:2D横版小狐狸闯关游戏(代码部分二)
  16. 计算机专业抑郁症多,计算机算法能够辅助医生诊断抑郁症?
  17. 随记 C#读取TXT文件乱码
  18. U盘装系统:魔方U盘启动制作
  19. 如何在Docker容器中运行Docker [3种方法]
  20. androidjni开发!应聘高级Android工程师历程感言,快来收藏!

热门文章

  1. 联想开机启动项按哪个_win7系统如何修改系统启动项 win7系统修改系统启动项方法【步骤】...
  2. ORA-28002:密码过期时的处理…………
  3. Java并发编程-ThreadPool线程池
  4. mysql按时间月份查询数据
  5. 实现PHP内部的通知机制,如当一个类的属性发生变化时,另外一个类就可以收到通知...
  6. [转帖]升级 Ubuntu,解决登录时提示有软件包可以更新的问题
  7. Nexus 3.X(Maven仓库私服)仓库迁移与备份
  8. Hibernate入门级实例
  9. 快速切换目录软件推荐——autojump
  10. Win7下MATLAB 7.0下载地址+详细安装+运行错误解决