标签: cowplot

使用牛皮图时,减少图之间的边距

我想使用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)

r ggplot2 cowplot

6
推荐指数
2
解决办法
3342
查看次数

ggplot-多个图例排列

我想在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)

r legend ggplot2 cowplot

6
推荐指数
1
解决办法
3267
查看次数

使用cowplot和ggplot2在某些行周围绘制边框

我想以某种方式表明多面板图中的某些行应该进行比较.例如,我想制作这个情节:

在此输入图像描述

看起来像这个图(用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的背景略有不同?那可能会更好.

r ggplot2 cowplot

6
推荐指数
1
解决办法
442
查看次数

ggplot:由几个分类变量组成的箱线图

我正在尝试使用 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)

r ggplot2 dplyr cowplot yaxis

6
推荐指数
2
解决办法
4769
查看次数

for 循环与 ggplots 生成具有相同值但不同标题的图形

我已经阅读了很多关于使用循环为 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 …

for-loop r ggplot2 cowplot

5
推荐指数
1
解决办法
2433
查看次数

如何通过标题而不是绘图区域来对齐多个绘图?

我用来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)

r ggplot2 gridextra cowplot

5
推荐指数
1
解决办法
935
查看次数

ggplot2 - 将奇数个图正确排列成一个图形

我有奇数个图可以排列成一个图形,我希望显示以图形最后一行为中心的最后一个图。

这里有一些示例数据:

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)

r ggplot2 cowplot

5
推荐指数
1
解决办法
1817
查看次数

R - cowplot:使用 plot_grid 排列 png 图像和 ggplot

我正在尝试使用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)

r ggplot2 cowplot

5
推荐指数
0
解决办法
911
查看次数

将多面 ggplots (facet_wrap) 与 R 中的牛图对齐

我想对齐两个面板图,其中的一个产生facet_wrapggplot以下方式(注: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)

r ggplot2 cowplot

5
推荐指数
1
解决办法
507
查看次数

将多个 gt 表合并为一个图

使用下面的代码(根据此处的代码进行编辑)我生成了两个带有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: …

r cowplot patchwork gt gtextras

5
推荐指数
1
解决办法
3676
查看次数

标签 统计

cowplot ×10

r ×10

ggplot2 ×9

dplyr ×1

for-loop ×1

gridextra ×1

gt ×1

gtextras ×1

legend ×1

patchwork ×1

yaxis ×1