边际图和组合折线图

边际图和组合折线图

#加载 R 包,其中 ggplot2 用于作图,gtable 用于提取图像属性,grid 用于合并图像
library(ggplot2)
library(gtable)
library(grid)

定义函数,用于组合 ggplot2 绘图结果构建双坐标轴,参考自:

https://stackoverflow.com/questions/36754891/ggplot2-adding-secondary-y-axis-on-top-of-a-plot

y2_plot <- function(p1, p2) {
p1 <- ggplotGrob(p1)
p2 <- ggplotGrob(p2)

Get the location of the plot panel in p1.

These are used later when transformed elements of p2 are put back into p1

pp <- c(subset(p1$layout, name == ‘panel’, se = t:r))

Overlap panel for second plot on that of the first plot

p1 <- gtable_add_grob(p1, p2 g r o b s [ [ w h i c h ( p 2 grobs[[which(p2 grobs[[which(p2layout n a m e = = ′ p a n e l ′ ) ] ] , p p name == 'panel')]], pp name==panel)]],ppt, pp l , p p l, pp l,ppb, pp$l)

Then proceed as before:

ggplot contains many labels that are themselves complex grob;

usually a text grob surrounded by margins.

When moving the grobs from, say, the left to the right of a plot,

Make sure the margins and the justifications are swapped around.

The function below does the swapping.

Taken from the cowplot package:

https://github.com/wilkelab/cowplot/blob/master/R/switch_axis.R

hinvert_title_grob <- function(grob){

# Swap the widths
widths <- grob$widths
grob$widths[1] <- widths[3]
grob$widths[3] <- widths[1]
grob$vp[[1]]$layout$widths[1] <- widths[3]
grob$vp[[1]]$layout$widths[3] <- widths[1]

# Fix the justification
grob$children[[1]]$hjust <- 1 - grob$children[[1]]$hjust 
grob$children[[1]]$vjust <- 1 - grob$children[[1]]$vjust 
grob$children[[1]]$x <- unit(1, 'npc') - grob$children[[1]]$x
grob

}

Get the y axis title from p2

index <- which(p2 l a y o u t layout layoutname == ‘ylab-l’) # Which grob contains the y axis title?
ylab <- p2$grobs[[index]] # Extract that grob
ylab <- hinvert_title_grob(ylab) # Swap margins and fix justifications

Put the transformed label on the right side of p1

p1 <- gtable_add_cols(p1, p2 w i d t h s [ p 2 widths[p2 widths[p2layout[index, ] l ] , p p l], pp l],ppr)
p1 <- gtable_add_grob(p1, ylab, pp t , p p t, pp t,ppr + 1, pp b , p p b, pp b,ppr + 1, clip = ‘off’, name = ‘ylab-r’)

Get the y axis from p2 (axis line, tick marks, and tick mark labels)

index <- which(p2 l a y o u t layout layoutname == ‘axis-l’) # Which grob
yaxis <- p2$grobs[[index]] # Extract the grob

yaxis is a complex of grobs containing the axis line, the tick marks, and the tick mark labels.

The relevant grobs are contained in axis$children:

axis$children[[1]] contains the axis line;

axis$children[[2]] contains the tick marks and tick mark labels.

First, move the axis line to the left

yaxis c h i l d r e n [ [ 1 ] ] children[[1]] children[[1]]x <- unit.c(unit(0, ‘npc’), unit(0, ‘npc’))

Second, swap tick marks and tick mark labels

ticks <- yaxis c h i l d r e n [ [ 2 ] ] t i c k s children[[2]] ticks children[[2]]tickswidths <- rev(ticks w i d t h s ) t i c k s widths) ticks widths)ticksgrobs <- rev(ticks$grobs)

Third, move the tick marks

ticks g r o b s [ [ 1 ] ] grobs[[1]] grobs[[1]]x <- ticks g r o b s [ [ 1 ] ] grobs[[1]] grobs[[1]]x - unit(1, ‘npc’) + unit(3, ‘pt’)

Fourth, swap margins and fix justifications for the tick mark labels

ticks g r o b s [ [ 2 ] ] < − h i n v e r t t i t l e g r o b ( t i c k s grobs[[2]] <- hinvert_title_grob(ticks grobs[[2]]<hinverttitlegrob(ticksgrobs[[2]])

Fifth, put ticks back into yaxis

yaxis$children[[2]] <- ticks

Put the transformed yaxis on the right side of p1

p1 <- gtable_add_cols(p1, p2 w i d t h s [ p 2 widths[p2 widths[p2layout[index, ] l ] , p p l], pp l],ppr)
p1 <- gtable_add_grob(p1, yaxis, pp t , p p t, pp t,ppr + 1, pp b , p p b, pp b,ppr + 1, clip = ‘off’, name = ‘axis-r’)
grid.newpage()
grid.draw(p1)
}

#使用的 R 自带的 mtcars 数据集,绘制“mpg-disp”与“mpg-drat”折线图,并尝试组合展示
#“mpg-disp”的折线图
p1 <- ggplot(mtcars, aes(mpg, disp)) +
geom_line(color = ‘blue’) +
theme(panel.grid = element_blank(), panel.background = element_rect(fill = NA, color = ‘black’),
axis.text.y = element_text(color = ‘blue’), axis.ticks.y = element_line(color = ‘blue’),
axis.title.y = element_text(color = ‘blue’)) +
labs(y = ‘disp’)

p1

#“mpg-drat”的折线图
p2 <- ggplot(mtcars, aes(mpg, drat)) +
geom_line(color = ‘red’) +
theme(panel.grid = element_blank(), panel.background = element_rect(fill = NA, color = ‘black’),
axis.text.y = element_text(color = ‘red’), axis.ticks.y = element_line(color = ‘red’),
axis.title.y = element_text(color = ‘red’)) +
labs(y = ‘drat’)

p2

#两张图共用同一 x 轴,尝试组合到一起,组合后默认第一张图的 y 轴在左侧,第二张图的 y 轴在右侧
y2_plot(p1, p2)

#输出图片
ggsave(‘p12.pdf’, y2_plot(p1, p2)[2], width = 5, height = 4)
ggsave(‘p12.png’, y2_plot(p1, p2), width = 5, height = 4)

setwd(“C:\Users\dell\Desktop”)
mtcarss=read.csv(“RF.csv”)

mtcarss

#使用的 R 自带的 mtcars 数据集,绘制“mpg-disp”与“mpg-drat”折线图,并尝试组合展示
#“mpg-disp”的折线图
p1 <- ggplot(mtcarss, aes(Year, PPM)) +
geom_line(color = ‘blue’) +
theme(panel.grid = element_blank(), panel.background = element_rect(fill = NA, color = ‘black’,size=1.5),
axis.text.y = element_text(size=16,color = ‘blue’), axis.ticks.y = element_line(color = ‘blue’),
axis.title.y = element_text(size=16,color = ‘blue’),axis.text.x = element_text(size=16,color = ‘black’) , axis.title.x = element_text(size=16,color = ‘black’)) +geom_line( color = ‘blue’,size=1)+
labs(y = ‘PPM’)

p1

#“mpg-drat”的折线图
p2 <- ggplot(mtcarss, aes(Year,temp )) +
geom_line(color = ‘red’) +
theme(panel.grid = element_blank(), panel.background = element_rect(fill = NA, color = ‘black’,size=1.5),
axis.text.y = element_text(size=16,color = ‘red’), axis.ticks.y = element_line(color = ‘red’),
axis.title.y = element_text(size=16,color = ‘red’),axis.text.x = element_text(size=16,color = ‘black’) , axis.title.x = element_text(size=16,color = ‘black’)) +geom_line( color = ‘red’,size=1)+
labs(y = ‘temp’)

p2

#两张图共用同一 x 轴,尝试组合到一起,组合后默认第一张图的 y 轴在左侧,第二张图的 y 轴在右侧
y2_plot(p1, p2)

#输出图片
ggsave(‘p12.pdf’, y2_plot(p1, p2), width = 5, height = 4)
ggsave(‘p121.png’, y2_plot(p1, p2), width = 5, height = 4)

/R语言基本功:绘制带边际图的散点图
刘老师医学统计 2020-08-25 20:35

#install.packages(“ggpubr”) # 安装包
library(ggpubr) # 加载包
data(iris) # 加载数据集
View(iris) # 预览数据集

plots <- ggscatterhist(iris, # 包含绘图变量的数据集
x = “Sepal.Length”, y = “Sepal.Width”, # 绘图变量
color = “#00AFBB”, # 设置颜色
margin.params = list(fill = “#00AFBB”)) # 设置边际图的颜色

plots <- ggscatterhist(iris, # 包含绘图变量的数据集
x = “Sepal.Length”, y = “Sepal.Width”, # 绘图变量
color = “#00AFBB”, # 设置颜色
margin.plot = “histogram”, # 设置边际图的类型
margin.params = list(fill = “#00AFBB”)) # 设置边际图的颜色

plots s p < − p l o t s sp <- plots sp<plotssp + # sp为散点图主图
geom_hline(yintercept = 3, linetype = “dashed”, color = “blue”) +
geom_vline(xintercept = 6, linetype = “dashed”, color = “red”)
plots

plots s p < − p l o t s sp <- plots sp<plotssp +
stat_smooth(method=lm)
plots

model <- lm(Sepal.Length ~ Sepal.Width, iris)
summary(model)

plots s p < − p l o t s sp <- plots sp<plotssp +
annotate(“text”, x=4.7, y=4.4, parse=TRUE,
label=“r^2 == 0.0138 * ’ p-value = 0.1529’”)
plots

ggscatterhist(
iris, x = “Sepal.Length”, y = “Sepal.Width”,
color = “Species”, size = 2.5, alpha = 0.5,
palette = c(“#00AFBB”, “#E7B800”, “#FC4E07”),
margin.params = list(fill = “Species”, color = “black”, size = 0.2)
)

ggscatterhist(
iris, x = “Sepal.Length”, y = “Sepal.Width”,
color = “Species”, size = 3, alpha = 0.6,
palette = c(“#00AFBB”, “#E7B800”, “#FC4E07”),
margin.plot = “histogram”,
ggtheme = theme_bw()
)

setwd(“C:\Users\dell\Desktop”)

library(ggpubr)
ggscatterhist(iris,
x = “Sepal.Length”,
y = “Sepal.Width”)

ggscatterhist(iris,
x = “Sepal.Length”,
y = “Sepal.Width”,
color = “Species”,
size=4,
palette = c(“#00AFBB”, “#E7B800”, “#FC4E07”),
margin.plot = “boxplot”,
ggtheme = theme_bw(),
margin.params = list(fill=“Species”))

#https://www.jianshu.com/p/ec9e39362f24

##https://www.jianshu.com/p/ece7c8848fd9

Import the data

file_path <- “http://www.sthda.com/sthda/RDoc/data/housetasks.txt”
housetasks <- read.delim(file_path, row.names = 1)

head(housetasks)
chisq <- chisq.test(housetasks)

ggballoonplot(housetasks,
fill = “value”,
size.range = c(1,15))+
scale_fill_viridis_c(option = “C”)

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值