文章目录
在循环或者子函数中只显示最后一个ggplot图像的问题解决
使用print(ggplot)
例如:
for (i in 1:10) {
figure<-ggplot(dataframe,aes(x=x,y=y))+points()
print(figure)
}
更改ggplot中刻面图的标签
该部分参考:
https://blog.csdn.net/tanzuozhev/article/details/51112177
修改分页的标签外观
figure + facet_grid(sex ~ day) +
theme(strip.text.x = element_text(size=8, angle=75),
strip.text.y = element_text(size=12, face="bold"),
strip.background = element_rect(colour="red", fill="#CCCCFF"))
修改分页标签文字
labels <- c(Female = "Women", Male = "Men")
sp + facet_grid(. ~ sex, labeller=labeller(sex = labels))
labeller
labeller() 通过输入一个方法, 对字符串进行该方法处理的,重新返回字符串.
# Reverse each strings in a character vector
reverse <- function(strings) {
strings <- strsplit(strings, "")
vapply(strings, function(x) {
paste(rev(x), collapse = "")
}, FUN.VALUE = character(1))
}
sp + facet_grid(. ~ sex, labeller=labeller(sex = reverse))
刻面图中释放坐标轴
# scales="free_y", y轴自由设置
hp + facet_grid(sex ~ smoker, scales="free_y")
对于x轴也是一样的
对ggplot的图例进行修改
https://blog.csdn.net/zx403413599/article/details/48581713
将其他作图系统转换为ggplot对象
使用ggplotify中的as.ggplot()可以将其他图片转换为ggplot对象,例如:
library(pacman)
p_load(ggplotify)
p4 <- as.ggplot(~boxplot(mtcars$wt))
多图形排版方法1
加载patchwork包之后,两个ggplot图形直接的加号连接可以实现并排排列:
library(pacman)
p_load(patchwork)
p1 <- ggplot(mtcars, aes(x=hp, y=wt, colour = mpg)) +
geom_point()
p2 <- ggplot(mtcars, aes(x=gear)) +
geom_bar() +
facet_wrap(~cyl)
p1 + p2+ p1
使用cowplot中的plot_grid()可以做出更加紧凑的排版:
library(pacman)
p_load(cowplot)
p1 <- ggplot(mtcars, aes(x=hp, y=wt, colour = mpg)) +
geom_point()
p2 <- ggplot(mtcars, aes(x=gear)) +
geom_bar() +
facet_wrap(~cyl)
p3 <- as.ggplot(~barplot(mtcars$wt))
p4 <- as.ggplot(~boxplot(mtcars$wt))
plot_grid(p1, p2, p3, p4,p1, labels=LETTERS[1:4])
多图形排版方法2
require(ggplot2)
require(grid)
##只对ggplot有用
chart1 <- ggplot(mtcars, aes(mpg, wt, colour = factor(cyl))) + geom_point()
chart2 <- ggplot(diamonds, aes(carat, depth, colour = color)) + geom_point()
chart3<- ggplot(diamonds, aes(carat, depth, colour = color)) + geom_point() + facet_grid(.~color)
grid.newpage() ###新建图表版面
pushViewport(viewport(layout = grid.layout(2,2))) ####将版面分成2*2矩阵
vplayout <- function(x,y){viewport(layout.pos.row = x, layout.pos.col = y)}
###定义图表的布局规则,也就是指定画布的行显示图表的X轴,列显示图表的Y轴。
print(chart3, vp = vplayout(1,1:2)) ###将(1,1)和(1,2)的位置画图chart3
print(chart2, vp = vplayout(2,1)) ###将(2,1)的位置画图chart2
print(chart1 , vp = vplayout(2,2)) ###将(2,2)的位置画图chart1
多图形排版方法3(最强大)
customLayout包可以兼容所有作图系统的排版,安装方法:
# 第一种方法
install.packages("customLayout")
# 第二种方法
library(devtools)
install_github("zzawadz/customLayout")
实例:
library(customLayout)
library(magrittr)
#############
lay<-lay_new(
mat=matrix(1:4,ncol=2),
widths=c(3,2),
heights = c(2,1)
)
lay_show(lay)
lay2 <- lay_new(
matrix(1:4, nc = 2),
widths = c(3, 5),
heights = c(2, 4))
lay_show(lay2)
#########列向拼接
cl = lay_bind_col(lay, lay2, widths = c(3, 1))
lay_show(cl)
#########行拼接
lay3 <- lay_new(matrix(1:2))
lay4 <- lay_bind_row(cl, lay3, heights = c(5, 2))
lay_show(lay4)
########嵌入
slay <- lay_split_field(lay, lay2, field = 4)
lay_show(slay)
########
####important
#######将图形嵌入所分区块中
par(mar = c(1, 2, 2, 1),col.axis="red")#调整图像边界留白
lay <- lay_new(
matrix(1:4, ncol = 2),
widths = c(3, 2),
heights = c(2, 1))
lay2 <- lay_new(matrix(1:3))
cl <- lay_bind_col(lay, lay2, widths = c(3, 1))
lay_show(cl)
lay_set(cl) # initialize drawing areaset.seed(123)
plot(1:100 + rnorm(100))
plot(rnorm(100), type = "l")
hist(rnorm(500))
acf(rnorm(100))
pie(c(3, 4, 6), col = 2:4)
pie(c(3, 2, 7), col = 2:4 + 3)
pie(c(5, 4, 2), col = 2:4 + 6)
par(mfrow = c(1, 1))#关闭分区
##########
##########
#########将ggplot嵌入所分区块
library(ggplot2)
library(gridExtra)
lay <- lay_new( matrix(1:2, ncol = 1))
lay2 <- lay_new(matrix(1:3))
cl <- lay_bind_col(lay, lay2, widths = c(3, 1))
cuts <- sort(unique(diamonds[["cut"]]),decreasing = TRUE)
make_cut_plot <- function(cut) {
dd <- diamonds[diamonds[["cut"]] == cut, ]
ggplot(dd) +
geom_point(aes(carat, price)) +
facet_wrap("cut")
}
plots <- lapply(cuts, make_cut_plot)
lay_grid(plots, cl)