GGplot2简单作图

技术文档网 2021-05-12

ggplot2使用过程中的常用资源:

画图基本公式如下:

散点图scatter plot

library(ggplot2)
rm(list = ls())
data(mpg)  # load mpg dataset
head(mpg)
  manufacturer model displ  year   cyl trans      drv     cty   hwy fl    class
1 audi         a4      1.8  1999     4 auto(l5)   f        18    29 p     compact
2 audi         a4      1.8  1999     4 manual(m5) f        21    29 p     compact
3 audi         a4      2    2008     4 manual(m6) f        20    31 p     compact

base_size = 14

p <- ggplot(mpg, aes(x = cty, y = hwy)) + geom_point() +
   labs(title = "", x = "cty", y = "hwy") +
   theme(axis.title=element_text(size = base_size),
        panel.background = element_blank(),
        panel.grid.major = element_blank(),
        panel.grid.minor = element_blank(),
        panel.border = element_rect(colour = "black", fill=NA,size=1),
        axis.text.x = element_text(colour="black",size=base_size),
        axis.text.y = element_text(colour="black",size=base_size),
        plot.title = element_text(size = base_size, hjust = 0.5),
        plot.margin = margin(0.3, 0.4, 0.3, 0.3, "cm"))
p

添加回归线,看x轴变量和y变量的相关性及显著性。

lm_eqn <- function(df, y, x){
    formula = as.formula(sprintf('%s ~ %s', y, x))
    m <- lm(formula, data=df);
    eq <- substitute(~~italic(R)^2~"="~r2*","~~italic(p_value)~"="~pvalue,
     list(r2 = format(summary(m)$r.squared, digits = 3),
         pvalue = format(summary(m)$coefficients[2,'Pr(>|t|)'], digits=1)))
    as.character(as.expression(eq));
}

p <- p + geom_text(x=25,y=15,
                   label=lm_eqn(mpg, "cty", "hwy"),
                   color='blue',parse=T) +
  geom_smooth(method='lm')
p

折线图curve plot

折线图中只有一个group,x轴为连续变量。

fig <- ggplot(mtcars, aes(mpg,qsec)) +
  geom_line() +
  geom_point() +
  labs(title="", x=expression(paste("mpg (x", 10^{9}, ")")), y =expression(paste("qsec (x", 10^{9}, ")")))

fig = fig +theme(panel.border = element_rect( fill = NA, colour = "black", size = 1),
                 panel.grid.major = element_blank(),
                 panel.grid.minor = element_blank(),
                 panel.background = element_blank())
fig

折线图中有多个groups,且x轴为不连续的变量。

head(y)
  sampleName    variable    value sampleName_new
1        B73 Total_Bases 77.81782            B73
2       E600 Total_Bases 76.40795           E600
3       D619 Total_Bases 82.04591           D619

fig <-  ggplot(y, aes(x=sampleName_new, y=value, group=variable, colour=variable)) +
  geom_line(size = 0.5) +
  geom_point(aes(shape=variable),size = 1) +
  labs(title="", x="", y =expression(paste("Base count (x", 10^{9}, ")"))) +
  geom_hline(yintercept=70, linetype="dashed", color = "black")

fig = fig +theme(legend.position = c(0.75,0.85),
                 panel.border = element_rect( fill = NA, colour = "black", size = 1),
                 panel.grid.major = element_blank(),
                 panel.grid.minor = element_blank(),
                 panel.background = element_blank(),
                 legend.title = element_blank(),
                 legend.text=element_text(size=base_size),
                 legend.key = element_blank(),
                 legend.direction = "horizontal",
                 axis.text.x = element_text(angle = 90,size=10, hjust = 0.3, vjust=0.5, colour = "black") ,
                 axis.text.y = element_text(size=base_size, colour = "black"),
                 plot.margin = margin(-0.5, 0, -0.4, 0, "cm"),
                 axis.title=element_text(size=base_size))
fig

箱图box plot

fig <- ggplot(mpg, aes(x=class, y=cty, color=class)) +
  scale_color_manual(values=c("#E41A1C", "#377EB8", "#4DAF4A", "#984EA3", "#FF7F00", "#FFFF33", "#A65628")) +
  geom_boxplot() +
  labs(title="",x="class", y = "cty")

fig <- fig + theme(axis.line = element_line(colour = "black",size=1),
        panel.grid.major = element_blank(),
        panel.grid.minor = element_blank(),
        panel.background = element_blank(),
        legend.position = "none",
        axis.text.x = element_text(size=base_size,colour = "black"),
        axis.text.y = element_text(size=base_size, colour = "black"),
        axis.title=element_text(size=base_size))
fig

Violin plot

fig <- ggplot(mpg, aes(x=class, y=cty, color=class)) +
  scale_color_manual(values=c("#E41A1C", "#377EB8", "#4DAF4A", "#984EA3", "#FF7F00", "#FFFF33", "#A65628")) +
  geom_violin(trim=FALSE, fill="white") +
  geom_boxplot(width=0.1) +
  labs(title="",x="class", y = "cty")

fig <- fig + theme(axis.line = element_line(colour = "black",size=1),
        panel.grid.major = element_blank(),
        panel.grid.minor = element_blank(),
        panel.background = element_blank(),
        legend.position = "none",
        axis.text.x = element_text(size=base_size,colour = "black"),
        axis.text.y = element_text(size=base_size, colour = "black"),
        axis.title=element_text(size=base_size))
fig

密度图density plot

多个groups的密度图

fig <- ggplot(mpg, aes(cty, color=factor(cyl))) +
  geom_density(aes(y = ..density..)) +
  ylab("Density") +
  xlab("cty") +
  ggtitle("City Mileage Grouped by Number of cylinders") +
  theme(plot.title = element_text(hjust = 0.5),
      legend.position = c(0.7,0.75),
      legend.title = element_blank(),
      legend.key.width = unit(0.2, "cm"),
      legend.text=element_text(size=base_size),
      axis.title=element_text(size = base_size),
      panel.background = element_blank(),
      panel.grid.major = element_blank(),
      panel.grid.minor = element_blank(),
      panel.border = element_rect(colour = "black", fill=NA,size=1),
      axis.text.x = element_text(size=base_size),
      axis.text.y = element_text(colour="black", size=base_size))
fig

多个groups的直方图

fig <- ggplot(mpg, aes(cty, fill=factor(cyl))) +
  geom_histogram(binwidth = 1,aes(y=1*..density..), position = 'dodge') +
    # 这里1*..density.. 是因为binwidth=1,保证y轴的值对应每个group的proportion,是0和1间的数。
  ylab("Proportion") +
  xlab("cty") +
  ggtitle("City Mileage Grouped by Number of cylinders") +
  theme(plot.title = element_text(hjust = 0.5),
      legend.position = c(0.7,0.75),
      legend.title = element_blank(),
      legend.key.width = unit(0.2, "cm"),
      legend.text=element_text(size=base_size),
      axis.title=element_text(size = base_size),
      panel.background = element_blank(),
      panel.grid.major = element_blank(),
      panel.grid.minor = element_blank(),
      axis.line = element_line(colour = "black",size=1),
      axis.text.x = element_text(size=base_size),
      axis.text.y = element_text(colour="black", size=base_size))
fig

柱状图bar plot

保证例子中是有显示显著水平的

韦恩图venn diagram

热图heatmap

相关文章

  1. 硅谷互联网公司的开发流程

    开发流程包括这么几个阶段: OKR 的设立; 主项目及其子项目的确立; 每个子项目的生命周期; 主项目的生命周期; 收尾、维护、复盘。 第一点,OKR 的设立 所有项目的起始,都应该从 Ro

  2. RESTful-表述性状态转移风格

    REST英文全拼:Representational State Transfer 面向资源编程 资源指的就是一类数据 产品表-&gt;就是产品资源 最重要的是如何表示一个资源 地址即

  3. 稳定性思考

    产品功能线 0-1: 当系统从无到有的时候,首要考虑的是研发效率,功能快速迭代,满足快速增长的业务需求 1-10 系统已经搭建起来,此时考虑的是系统的稳定性。 可用性:1.隔离:区分出核心和非核心功能

  4. Supervisor守护队列发邮件

    安装 CentOS: yum -y install supervisor Debien/Ubuntu适用:apt-get install supervisor 配置 修改主配置文件:vim /et

  5. 安装libsodium,让服务器支持chacha20等加密方式

    用chacha20加密方式需要安装libsodium 注意:libsodium从1.0.15开始就废弃了aes-128-ctr yum install wget m2crypto git libsod

随机推荐

  1. 硅谷互联网公司的开发流程

    开发流程包括这么几个阶段: OKR 的设立; 主项目及其子项目的确立; 每个子项目的生命周期; 主项目的生命周期; 收尾、维护、复盘。 第一点,OKR 的设立 所有项目的起始,都应该从 Ro

  2. RESTful-表述性状态转移风格

    REST英文全拼:Representational State Transfer 面向资源编程 资源指的就是一类数据 产品表-&gt;就是产品资源 最重要的是如何表示一个资源 地址即

  3. 稳定性思考

    产品功能线 0-1: 当系统从无到有的时候,首要考虑的是研发效率,功能快速迭代,满足快速增长的业务需求 1-10 系统已经搭建起来,此时考虑的是系统的稳定性。 可用性:1.隔离:区分出核心和非核心功能

  4. Supervisor守护队列发邮件

    安装 CentOS: yum -y install supervisor Debien/Ubuntu适用:apt-get install supervisor 配置 修改主配置文件:vim /et

  5. 安装libsodium,让服务器支持chacha20等加密方式

    用chacha20加密方式需要安装libsodium 注意:libsodium从1.0.15开始就废弃了aes-128-ctr yum install wget m2crypto git libsod