我想使用cowplot将一些图组合在一起.但我不能改变边距大小.我想只使用一个y轴,但是边距仍然很大,我想减少.我已经使用了ggplot中的plot.margin代码,虽然当我查看单个图时它会起作用,但是当这些图组合时它似乎不起作用.
我做了一些示例代码:
library(ggplot2)
library(cowplot)
x <- c("a", "b")
y1 <- c(3,6)
y2 <- c(10,15)
data1 <- data.frame(x,y1)
data2 <- data.frame(x, y2)
ylab1 <- ylab("Very nice y values")
xlab1 <- xlab("Very nice factors")
plot1 <- ggplot(data1, aes(x=x, y = y1)) +
geom_bar(stat ="identity", position=position_dodge(), fill = "grey")+
theme(plot.margin = unit(c(0.5,0.5,0.5,0.5), "cm")) + xlab1 + ylab1
plot1
ylab2 <- ylab("")
xlab2 <- xlab("Very nice factors")
plot2 <- ggplot(data2, aes(x=x, y = y2)) +
geom_bar(stat = "identity",position=position_dodge(), fill = "grey")+
theme(plot.margin = unit(c(0.5,0.5,0.5,-0.5), …Run Code Online (Sandbox Code Playgroud) 我想在ggplot中安排多行和多行图例。但是目前,从文档中,我只能在1个图例中确定方向或操作行/列。我忽略了什么吗?感谢您对解决方案的任何参考。这是示例代码,我做了什么以及预期的结果。
data <- seq(1000, 4000, by=1000)
colorScales <- c("#c43b3b", "#80c43b", "#3bc4c4", "#7f3bc4")
names(colorScales) <- data
ggplot() +
geom_point(aes(x=data, y=data, color=as.character(data), fill=data, size=data),
shape=21) +
scale_color_manual(name="Legend 1",
values=colorScales) +
scale_fill_gradientn(name="Legend 2",
labels=comma, limits=c(0, max(data)),
colours=rev(c("#000000", "#FFFFFF", "#BA0000")),
values=c(0, 0.5, 1)) +
scale_size_continuous(name="Legend 3") +
theme(legend.direction = "vertical", legend.box = "vertical")
Run Code Online (Sandbox Code Playgroud)
ggplot() +
geom_point(aes(x=data, y=data, color=as.character(data), fill=data, size=data),
shape=21) +
scale_color_manual(name="Legend 1",
values=colorScales) +
scale_fill_gradientn(name="Legend 2",
labels=comma, limits=c(0, max(data)),
colours=rev(c("#000000", "#FFFFFF", "#BA0000")),
values=c(0, 0.5, 1)) +
scale_size_continuous(name="Legend 3") +
theme(legend.direction = …Run Code Online (Sandbox Code Playgroud) 我想以某种方式表明多面板图中的某些行应该进行比较.例如,我想制作这个情节:
看起来像这个图(用PowerPoint制作的面板周围的框):
这是我使用第一个图表的代码.我使用了ggplot和cowplot:
require(cowplot)
theme_set(theme_cowplot(font_size=12)) # reduce default font size
plot.mpg <- ggplot(mpg, aes(x = cty, y = hwy, colour = factor(cyl))) +
geom_point(size=2.5)
plot.diamonds <- ggplot(diamonds, aes(clarity, fill = cut)) + geom_bar() +
theme(axis.text.x = element_text(angle=70, vjust=0.5))
plot.mpg2 <- ggplot(mpg, aes(x = cty, y = hwy, colour = factor(cyl))) +
geom_point(size=2.5)
plot.diamonds2 <- ggplot(diamonds, aes(clarity, fill = cut)) + geom_bar() +
theme(axis.text.x = element_text(angle=70, vjust=0.5))
plot_grid(plot.mpg, plot.diamonds,plot.mpg2, plot.diamonds2, nrow=2,labels = c('A', 'B','C','D'))
Run Code Online (Sandbox Code Playgroud)
我可以对此代码进行更改以获取我想要的边框吗?或者我甚至可以让面板A和B的颜色与面板C和D的背景略有不同?那可能会更好.
我正在尝试使用 ggplot2 在一张图表中绘制多个箱线图。我有 1 个连续变量和几个因素。我想要一个 Y 轴,每对箱线图都有自己的 x 轴和自己的因子水平。到目前为止,我尝试将cowplot::plot_grid我单独制作的图表与我用于 Y 轴的空图表连接在一起。我试图通过隐藏边距和调整图表大小来使图表很好地融合,但我仍然无法获得合理的结果,而且这种方法涉及太多的手动调整。这就是我想要得到的,也是我目前想到的:
图表
这是我的脚本:
library(ggplot2)
library(cowplot)
library(dplyr)
# make a dataset:
DF <- mtcars
DF$cyl <- as.factor(DF$cyl)
DF$vs <- as.factor(DF$vs)
DF$am <- as.factor(DF$am)
DF$gear <- as.factor(DF$gear)
DF$carb <- as.factor(DF$carb)
#str(DF)
# fisrt boxplot
p1 <- DF %>% ggplot() + theme_grey() + aes(x=cyl, y=mpg, fill=cyl) +
geom_boxplot() +
theme(legend.position = "none",
axis.title.y = element_blank(),
axis.text.y = element_blank(),
axis.ticks.y = element_blank()) +
theme(plot.margin = margin(t=0.1, r=0, b=0, l=0, unit="cm"))
# second …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 …
我用来egg对齐页面上的多个绘图。我想知道是否可以通过标题a)而c)不是绘图区域来对齐两列?谢谢!
代码:
library(egg)
library(grid)
p1 <- ggplot(mtcars, aes(mpg, wt, colour = factor(cyl))) +
geom_point() + ggtitle("a)")
p1
p2 <- ggplot(mtcars, aes(mpg, wt, colour = factor(cyl))) +
geom_point() + facet_wrap(~ cyl, ncol = 2, scales = "free") +
guides(colour = "none") +
theme() + ggtitle("b)")
p2
p3 <- ggplot(mtcars, aes(mpg, wt, colour = factor(cyl))) +
geom_point() + facet_grid(. ~ am, scales = "free") + guides(colour="none") +
ggtitle("c)")
p3
g1 <- ggplotGrob(p1)
g2 <- ggplotGrob(p2)
g3 …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) 使用下面的代码(根据此处的代码进行编辑)我生成了两个带有gt包的示例表:
library(tidyverse)
library(patchwork)
library(gt)
p1 <- mtcars %>%
head(5) %>%
gt()
p2 <- mtcars %>%
tail(5) %>%
gt()
# using wrap elements because this seems to be the answer to non-ggplot grobs e.g. #164
wrap_elements(full = p1 | p2)
grid.arrange(p1, p2, ncol=2, top="Main Title")
Run Code Online (Sandbox Code Playgroud)
出去:
Error in p1 | p2 :
operations are possible only for numeric, logical or complex types
Run Code Online (Sandbox Code Playgroud)
我希望将它们合并为一个 ggplot 对象:p <- (p1 | p2)使用patchwork包,但我还没有找到有效的答案。
我还尝试使用as_ggplot()函数将其转换为 ggplot: …