我正在使用 afor loop将 ggplots 分配给 a list,然后将其传递给plot_grid()(package cowplot)。plot_grid将多个 ggplots 并排放置在一个图中。这手动工作正常,但是当我使用 a 时for loop,生成的最后一个图在图的每个子帧中重复(如下所示)。换句话说,所有子帧都显示相同的 ggplot。
这是一个玩具示例:
require(cowplot)
dfrm <- data.frame(A=1:10, B=10:1)
v <- c("A","B")
dfmsize <- nrow(dfrm)
myplots <- vector("list",2)
count = 1
for(i in v){
myplots[[count]] <- ggplot(dfrm, aes(x=1:dfmsize, y=dfrm[,i])) + geom_point() + labs(y=i)
count = count +1
}
plot_grid(plotlist=myplots)
Run Code Online (Sandbox Code Playgroud)
预期图:
图自for loop:
我尝试将列表元素转换为 grobs,如本问题所述,如下所示:
mygrobs <- lapply(myplots, ggplotGrob)
plot_grid(plotlist=mygrobs)
Run Code Online (Sandbox Code Playgroud)
但我得到了同样的结果。
我认为问题在于循环分配,而不是plot_grid(),但我看不出我做错了什么。
我的目标是在 R 中生成绘图,以便它可以很好地打印在信纸上。下面是我的例子:
library(cowplot)
sample_df <- data.frame(col_1=c(1,2,3), col_2=c(6,7,8))
plot_1 <-ggplot(data=sample_df, aes(x = col_1, y =col_2, group=1))+
geom_line()+ggtitle('Title 1')
plot_2 <-ggplot(data=sample_df, aes(x = col_1, y =col_2, group=1))+
geom_line()+ggtitle('Title 2')
width_letter = 6
height_letter = width_letter*8.5/11
pdf('outpdf_1.pdf', width=width_letter, height=height_letter)
plot_grid(plot_1, plot_2, labels = "AUTO", ncol = 2, align = 'v', scale = 0.65) +
theme(plot.margin = unit(c(2,2,2,2), "cm"))
dev.off()
Run Code Online (Sandbox Code Playgroud)
ggplot2我已经使用创建了一个数字列表列purrr,现在我想使用将cowplot::plot_grid()它们组合成一个图。我怎样才能做到这一点?有一种蛮力方法可以做到这一点,但是当我事先不知道列表列中有多少元素时,这可能不起作用。
### libraries needed
library(tidyverse)
# install.packages("devtools")
devtools::install_github("IndrajeetPatil/ggstatsplot")
### creating list column with plots
plots <- datasets::mtcars %>%
dplyr::mutate(.data = ., cyl2 = cyl) %>%
dplyr::group_by(.data = ., cyl) %>%
tidyr::nest(data = .) %>%
dplyr::mutate(
.data = .,
plot = data %>%
purrr::map(
.x = .,
.f = ~ ggstatsplot::ggbetweenstats(
data = .,
x = am,
y = mpg,
title = as.character(.$cyl2)
)
)
)
#> Warning: aesthetic `x` was not a factor; …Run Code Online (Sandbox Code Playgroud) 我有一个关于 Cowplot 中的情节对齐的问题。
我想在由 3 列组成的面板中对齐图 (ggplot)。第一列有 2 个图(垂直对齐),第二列有 1 个图,第三列也有两个图(垂直对齐)。
例子:
# Packages
library(tidyverse)
library(cowplot)
# Create sample data
df <- data.frame(replicate(2,sample(0:10,10,rep=TRUE)))
# Create sample plots
plot.a1 <- ggplot(df, aes(x=df$X1, y=df$X2)) +
geom_point()
plot.a2 <- plot.a1
plot.a <- plot_grid(plot.a1, plot.a2, align = "v", ncol = 1, nrow = 2)
plot.b <- plot.a1
plot.c1 <- plot.a1
plot.c2 <- plot.a1
plot.c <- plot_grid(plot.c1, plot.c2, align = "v", ncol = 1, nrow = 2)
# Create panel figure
plot_grid(plot.a, plot.b, plot.c, labels …Run Code Online (Sandbox Code Playgroud) 我正在尝试使用cowplot包的draw_image()功能。我已经设法在图表中获取图像作为示例。
我无法弄清楚 xy 位置是如何工作的,我必须不断输入随机数,直到看到图像。
require(ggplot2) #required packages
require(cowplot)
require(magick)
p1 <- qplot(Sepal.Length, Sepal.Width, data = iris)
ggdraw(p1) +
draw_image(
"https://upload.wikimedia.org/wikipedia/en/7/77/EricCartman.png",
y = 0.2,
scale = 0.5
)
Run Code Online (Sandbox Code Playgroud)
任何人都可以建议他们的运作规模如何?它看起来确实与图表的比例不同。
我试图将标签 A、B 和 C 添加到每个图表的左上角。我已经尝试过cowplot::draw_plot_label(),但似乎没有任何效果。有人可以帮忙吗?
这些 A、B 和 C 标签并不是每个图的主标题。
# Packages
library(ggplot2)
library(gridExtra)
library(cowplot)
# 1st plot
p1 <- ggplot(data = new_data %>%
filter(Species =="Sharksucker_Remora")) +
scale_colour_manual(values=c(Sharksucker_Remora="black"), labels = c("Sharksucker Remora")) +
geom_line(mapping = aes(x = Date, y = Proportion, group = Species, colour = Species)) +
xlab("") +
ylab("Proportion") +
theme(legend.position="top") +
theme(axis.text.x = element_text(angle = 90, vjust = 0.5, hjust = 1)) + labs(colour = ~italic(M.alfredi)~"Hitchhiker Species:") +
theme(legend.key=element_blank())
# 2nd plot
p2 <- ggplot(data …Run Code Online (Sandbox Code Playgroud) 我想不删除标题,并从该图表中删除轴标签,该图表是我从cowplot用plot_grid生成的。
这是我的代码
data(mtcars)
library(ggplot2)
library(cowplot)
mpg = ggplot() +
geom_boxplot(aes(y = mpg,x = as.factor(cyl)),data=mtcars) +
coord_flip()
am=ggplot() +
geom_boxplot(aes(y = mpg,x = as.factor(am)),data=mtcars) +
coord_flip()
vs=ggplot() +
geom_boxplot(aes(y = mpg,x = as.factor(vs)),data=mtcars) +
coord_flip()
gear = ggplot() +
geom_boxplot(aes(y = mpg,x = as.factor(gear)),data=mtcars) +
coord_flip()
p=plot_grid(mpg,am,vs,gear, labels = "Variables effecting Mileage", label_size = 14, hjust = -0.5,
+ vjust = 0.5)+theme_grey()
p
Run Code Online (Sandbox Code Playgroud)
此外,如果不使用Cowplot来创建它会更简单,那么您有何建议?
我想将几个 ggplot2 图表组合成一个使用cowplot::plot_grid(). 从它的文档:
?plot
Arguments
...
List of plots to be arranged into the grid. The plots can be objects of one of the following classes: ggplot, recordedplot, gtable, or alternative can be a function creating a plot when called (see examples).
Run Code Online (Sandbox Code Playgroud)
所以,如果我输入一个 ggplot2 对象列表 plot_grid(),它应该将这些图合并为一个,对吗?
那么为什么这行不通呢?
p1 <- ggplot(mpg, aes(x = cty, y = hwy, colour = factor(cyl))) +
geom_point(size=2.5)
p2 <- ggplot(diamonds, aes(clarity, fill = cut)) + geom_bar() +
theme(axis.text.x = element_text(angle=70, vjust=0.5))
list(p1, …Run Code Online (Sandbox Code Playgroud) 我正在尝试使用 R 中的owplot包并排放置一些图。
正如您所看到的,这张图像充满了麻烦:图太小、文本字体太大、留有太多空白。
我能够正确生成并保存这三个图,但是当我运行以下命令时,我得到了灾难图像:
general_plot <- plot_grid(plot_cf, plot_pos_neg, plot_scores, ncol = 2, align="h", labels=c("A", "B", "C"), label_size=5)
Run Code Online (Sandbox Code Playgroud)
我做错了什么?
这是我的完整代码(准备运行):
#!/usr/bin/env Rscript
if (!require("RColorBrewer")) {
install.packages("RColorBrewer")
library(RColorBrewer)
}
library(grid)
library(gridExtra)
library(gtable)
library(ggplot2)
library(cowplot)
SAVE_FILES = FALSE
digits = 2
generalTextSize = 5
# Confusion matrix barplot
barplot_creator <- function(inputText, saveFileName, upperYlim) {
confusionMatrixDataFrame <- read.table(header=TRUE, text=inputText)
confusionMatrixDataFrame$category = gsub("_", " ", confusionMatrixDataFrame$category)
confusionMatrixDataFrame$category = factor(confusionMatrixDataFrame$category, levels=unique(confusionMatrixDataFrame$category))
p <- ggplot(confusionMatrixDataFrame, aes(x=category, y=amount)) + geom_bar(aes(fill=category), stat="identity", position=position_dodge()) + ylim(0,upperYlim)
p + …Run Code Online (Sandbox Code Playgroud) 概述:
我使用下面的R 代码制作了一系列地图,并使用Cowplot 包中的 plot_grid()使用下面称为“QuercusRobur1”和“QuercusRobur2”的数据框将图排列到一个绘图窗口上。
情节看起来非常好;然而,每个地块的图例都没有对齐,看起来不整齐。
有谁知道如何使用 plot_grid 在新的绘图排列中垂直向下对齐这些图例?
如果有人可以提供帮助,我将不胜感激
代码
##Import Packages
library(ggplot2)
library(maps)
library(mapdata)
library(tidyverse)
##Get a map of the UK from maps:
UK <- map_data(map = "world", region = "UK")
head(UK)
dim(UK)
##Produce point data
MapUK<-ggplot(data = UK, aes(x = long, y = lat, group = group)) +
geom_polygon() +
coord_map()
##head
head(QuercusRobur1)
head(QuercusRobur2)
##Remove weird data points
QuercusRobur1<-QuercusRobur1%>%filter(Longitude<=3)
##Observation 1
p1 <- ggplot(QuercusRobur1,
aes(x = Longitude, …Run Code Online (Sandbox Code Playgroud)