我有一个由2x2配置的4个图组成的多图图。我使用“ cowplot”包安排了地块,并使用下面的代码安排了plot_grid函数
plot_grid(p1, p2, p3, p4, align='vh', vjust=1, scale = 1)
Run Code Online (Sandbox Code Playgroud)
其中p1-p4是我的4个图。产生的图形具有一个x轴标签,该标签与多图中的每一列关联:
有谁知道我该如何用Cowplot或其他方式编写以多图底部为中心的单个x轴标签的编码?
我正在尝试制作一个相关热图,其中x轴使用移动到顶部cowplot::switch_axis_position.我有不同长度的轴标签,我希望标签左对齐(或者更确切地说是底部对齐,因为它们旋转了90度).虽然我设法对齐标签,但它们会远远超出情节.
library(reshape2)
library(ggplot2)
library(cowplot)
# some toy data
set.seed(1)
mydata <- mtcars[, c(1, 3, 4, 5, 6, 7)]
# to show difference in justification better, make names of unequal length
names(mydata) = paste0(sample(c("mtcars_", ""), 6, replace = TRUE), names(mydata))
cormat <- round(cor(mydata), 2)
melted_cormat <- melt(cormat)
head(melted_cormat)
Run Code Online (Sandbox Code Playgroud)
首先是x轴移动到顶部,标签垂直居中的图:
plot <- ggplot(data = melted_cormat, aes(x=Var1, y=Var2, fill=value)) +
geom_tile() +
theme_bw(base_size=20) + xlab("") + ylab("") +
theme(axis.text.x = element_text(angle = 90, vjust = 0.5, hjust = 0.5))
ggdraw(switch_axis_position(plot, 'x')) …Run Code Online (Sandbox Code Playgroud) 我已经阅读了很多关于使用循环为 ggplot 生成大量图表的帖子,但找不到任何可以解释我的问题的帖子......
我有一个数据框,正在尝试遍历 92 列,为每列创建一个新图形。我想将每个图保存为一个单独的对象。当我运行我的循环(下面的代码)并打印图形时,所有图形都是正确的。但是,当我使用assign() 更改print() 命令时,图形不正确。标题正在发生变化,但图形值都是相同的(它们都是最终图形的值)。我发现了这一点,因为当我使用 plot_grid() 生成 10 个图时,图形标题和轴标签都是正确的,但值是相同的!
我的数据集很大,所以我提供了一个小数据集用于下面的说明。
示例数据名:
library(ggplot)
library(cowplot)
df <- as.data.frame(cbind(group=c(rep("A", 4), rep("B", 4)), a=sample(1:100, 8), b=sample(100:200, 8), c=sample(300:400, 8))) #make data frame
cols <- 2:4 #define columns for plots
for(i in 1:length(cols)){
df[,cols[i]] <- as.numeric(as.character(df[,cols[i]]))
} #convert columns to numeric
Run Code Online (Sandbox Code Playgroud)
情节:
for (i in 1:length(cols)){
g <- ggplot(df, aes(x=group, y=df[,cols[i]])) +
geom_boxplot() +
ggtitle(colnames(df)[cols[i]])
print(g)
assign(colnames(df)[cols[i]], g) #generate an object for each plot
}
plot_grid(a, b, c)
Run Code Online (Sandbox Code Playgroud)
我在想,当 ggplots 绘制绘图时,它只呈现 i …
可重复的示例可以在本教程中找到包牛皮图.
https://cran.r-project.org/web/packages/cowplot/vignettes/shared_legends.html
复制示例代码:
library(ggplot2)
library(cowplot)
#down-sampled diamonds data set
dsamp <- diamonds[sample(nrow(diamonds), 1000), ]
# Make three plots.
# We set left and right margins to 0 to remove unnecessary spacing in the
# final plot arrangement.
p1 <- qplot(carat, price, data=dsamp, colour=clarity) +
theme(plot.margin = unit(c(6,0,6,0), "pt"))
p2 <- qplot(depth, price, data=dsamp, colour=clarity) +
theme(plot.margin = unit(c(6,0,6,0), "pt")) + ylab("")
p3 <- qplot(color, price, data=dsamp, colour=clarity) +
theme(plot.margin = unit(c(6,0,6,0), "pt")) + ylab("")
# arrange the three plots in …Run Code Online (Sandbox Code Playgroud) 我正在安排2x2地块。这些图共享相同的轴,所以我想将它们放在一起,例如
这段代码:
library(ggplot2)
library(cowplot)
Value <- seq(0,1000, by = 1000/10)
Index <- 0:10
DF <- data.frame(Index, Value)
plot <- ggplot(DF, aes(x = Index, y = Value)) +
geom_line(linetype = 2) +
theme(aspect.ratio = 0.5)
plot_grid(plot, plot, plot, plot, align = "hv", ncol = 2)
Run Code Online (Sandbox Code Playgroud)
产生
但我想要类似的东西:
如何获得类似的结果?
我正在尝试coord_equal()使用cowplot::plot_grid()或将两个FACETED ggplot对象组合在一起,egg::ggarrange()并垂直对齐它们。
该egg::ggarrange()方法适用于UNFACETED地块,解决方案在此处发布。
但是,egg::ggarrange()当包含构面时,解决方案将失效。这些图已正确对齐,但是y轴的单位是x轴的单位的两倍。关于如何对此进行概括的任何建议?
dat1 <- data.frame(x = rep(1:10, 2), y = 1:20, z = rep(c("A", "B"), 10))
dat2 <- data.frame(x = 1:10, y = 1:10, z = rep(c("A", "B"), 5))
plot1 <- ggplot(dat1, aes(x=x, y=y)) +
geom_point() + coord_equal() + facet_wrap(~z)
plot2 <- ggplot(dat2, aes(x=x, y=y)) +
geom_point() + coord_equal() + facet_wrap(~z)
egg::ggarrange(plot1, plot2, ncol = 1)
Run Code Online (Sandbox Code Playgroud)
我试图将多个图与方面对齐.我的问题有些微不足道但是很顺利:我可以制作一个绘图,使绘图区域对齐,刻面本身对齐,但刻面条的宽度不一样.如果小平面的标签长度不同,则小平面条的大小应使文本可以适合小平面.到目前为止,我无法找到一种方法,在对齐多个图时使所有小平面条具有相同的宽度.
下面是我想要对齐的图表类型的示例以及我对齐它们的努力:
library(data.table)
library(ggplot2)
library(foreach)
library(stringr)
library(cowplot)
# example data to show how aligning faceted plots is not quite right
plotvars = c(paste0("plot1_var", 1:7), paste0("plot2_var",1:5), paste0("plot3_var",1:10))
data =
foreach(p=plotvars,.combine = "rbind") %do% {
d = data.table(plot = rep(str_extract(p,pattern = "plot[[:digit:]]"),2),
plot_variables = rep(p,2),
fill_categories = c("fill1","fill2"),
number = sample(1:1000, size = 2))
d[, facet_variables := ifelse(plot=="plot1",
rep(sample(paste0("facet",1:3),size=1),2),
ifelse(plot=="plot2",
rep(sample(paste0("facet_title",1:3),size=1),2),
ifelse(plot=="plot3",
rep(sample(paste0("facet_title_longer",1:3),size=1),2),
NA)))]
d
}
# function to make stacked barplots with facets + coord_flip
make_plot = function(data, plot_var) {
ggplot(data[plot==plot_var], …Run Code Online (Sandbox Code Playgroud) 我有奇数个图可以排列成一个图形,我希望显示以图形最后一行为中心的最后一个图。
这里有一些示例数据:
library(ggplot2)
set.seed(99)
x_1 = data.frame(z = rnorm(100))
x_2 = data.frame(z = rnorm(100))
x_3 = data.frame(z = rnorm(100))
lst = list(x_1, x_2, x_3)
lst_p = list()
for (i in 1:length(lst)) {
lst_p[[i]] = ggplot(data=lst[[i]], aes(lst[[i]]$z)) +
geom_histogram() +
xlab("X LAB") +
ylab("Y LAB")
}
p_no_labels = lapply(lst_p, function(x) x + xlab("") + ylab(""))
title = cowplot::ggdraw() + cowplot::draw_label("test", size = 20)
p_grid = cowplot::plot_grid(plotlist = p_no_labels, ncol = 2)
print(cowplot::plot_grid(title, p_grid,
ncol = 1, rel_heights = c(0.05, 1, 0.05))) …Run Code Online (Sandbox Code Playgroud) 我正在尝试使用plot_grid来自 cowplot 包并排排列 png 图像和 ggplot 对象:
library(cowplot)
library(tableHTML)
sg <- data.frame(start = c(0,5,10),
end = c(10,20,30),
duration = c(10,15,20),
row.names = c("A","B","C"))
p1 <- ggplot(sg)+
geom_segment(aes(x=start, y=row_number(start), xend=end, yend=row_number(start)),
size = 3) +
scale_y_reverse(labels = NULL) +
labs(y = "", x = "") +
theme(aspect.ratio = 1/5)
sg %>%
tableHTML() %>%
add_theme("scientific") %>%
tableHTML_to_image(file = "image2.png", zoom = 2)
p2 <- ggdraw() + draw_image("image2.png", scale = 0.7)
plot_grid(p2, p1, ncol = 2, scale = c(0.9,1), rel_widths = …Run Code Online (Sandbox Code Playgroud) 我想对齐两个面板图,其中的一个产生facet_wrap于ggplot以下方式(注:A组需要留空):
但是,我注意到面板 B 的 y 轴与从最后一个到面板 C 的绘图的 y 轴不完全对齐(尽管axis = 'lb'在两个方面都有选项)。
代码
# Load libraries
library(tidyverse)
library(cowplot)
# Create two facetted plots
p1 <- ggplot(data = diamonds, aes(x = carat, y = price)) +
facet_wrap(~ cut, scales = "free_y", ncol = 5) +
geom_point(size=0.5)
p2<- ggplot(data = filter(diamonds, price < 900 & (cut == "Fair" | cut == "Good" )), aes(x = carat, y = price)) +
facet_wrap(~ cut, scales = "free_y", ncol …Run Code Online (Sandbox Code Playgroud)