相关疑难解决方法(0)

左对齐两个图形边(ggplot)

我正在使用ggplot并且有两个图表,我希望彼此叠加显示.我使用grid.arrangegridExtra来堆叠它们.问题是,无论轴标签如何,我都希望图形的左边缘与右边缘对齐.(问题出现是因为一个图的标签很短而另一个图很长).

问题:
我该怎么做?我没有和grid.arrange结婚,但ggplot2是必须的.

我尝试了什么:
我尝试使用宽度和高度以及ncol和nrow来制作2 x 2网格并将视觉效果放在相对的角落然后玩宽度但我无法在对角处获得视觉效果.

require(ggplot2);require(gridExtra)
A <- ggplot(CO2, aes(x=Plant)) + geom_bar() +coord_flip() 
B <- ggplot(CO2, aes(x=Type)) + geom_bar() +coord_flip() 
grid.arrange(A, B, ncol=1)
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

r ggplot2 gridextra gtable

104
推荐指数
6
解决办法
3万
查看次数

如何对齐多个ggplot2图并在所有图上添加阴影

请在这里下载数据!

目标:绘制如下图像:

这个

特点: 1.两个不同的时间序列; 2.下面板有一个反向y轴; 3.阴影超过两个地块.

可能的解决方案:
1.刻面不合适 - (1)不能只使一个刻面的y轴反转,同时保持其他刻面不变.(2)难以逐个调整各个方面.
2.使用视口使用以下代码排列单个图:

library(ggplot2)
library(grid)
library(gridExtra)

##Import data
df<- read.csv("D:\\R\\SF_Question.csv")

##Draw individual plots
#the lower panel
p1<- ggplot(df, aes(TIME1, VARIABLE1)) + geom_line() + scale_y_reverse() + labs(x="AGE") + scale_x_continuous(breaks = seq(1000,2000,200), limits = c(1000,2000))
#the upper panel
p2<- ggplot(df, aes(TIME2, V2)) + geom_line() + labs(x=NULL) + scale_x_continuous(breaks = seq(1000,2000,200), limits = c(1000,2000)) + theme(axis.text.x=element_blank())

##For the shadows
#shadow position
rects<- data.frame(x1=c(1100,1800),x2=c(1300,1850),y1=c(0,0),y2=c(100,100))
#make shadows clean (hide axis, ticks, labels, background and grids)
xquiet …
Run Code Online (Sandbox Code Playgroud)

r ggplot2

31
推荐指数
2
解决办法
2万
查看次数

knitr的子图或子标题?

是否有可能使用knitr生成子图(带有相关的子标题)?这是一个最小的工作示例:

\documentclass{article}

\begin{document}

<<echo = FALSE, fig.cap = c("Some numbers.", "Some more numbers."), out.width = "0.5\\textwidth", fig.align = "center">>=

plot(1:10)
plot(30:100)

@

\end{document}
Run Code Online (Sandbox Code Playgroud)

这导致标记为图1和图2的两个图,其中标题(分别)被定义.但是我希望它们被标记为"图1a"和"图1b",就像使用子标题LaTeX包一样.

我知道有一个knitr选项"fig.env",但这并没有解决它(至少没有使用,例如,"fig.env ='subfigure'").这里有关于Sweave的类似帖子,但解决方案是一个不优雅的黑客:http://texblog.org/2011/12/01/sweave-subfig-controlling-figure-size-and-placement/

latex r subfigure knitr

22
推荐指数
3
解决办法
6849
查看次数

如何在牛皮画中将普通的ggplot与刻面的ggplot对齐?

我正试图通过使用cowplot包来以出版物的方式安排绘图.
我只是希望面板的尺寸和尺寸相同.

可重复的示例

library(ggplot2)
library(cowplot)

gg1 <- ggplot(mtcars)+
        geom_point(aes(x=mpg,y=hp))+
        theme_bw()+
        theme(aspect.ratio=1)

gg2 <- ggplot(mtcars)+
        geom_point(aes(x=mpg,y=hp,fill=cyl))+
        facet_wrap(~cyl,ncol=2)+
        theme_bw()+
        theme(aspect.ratio=1,
              legend.position='none')

output <- plot_grid(gg1,gg2, labels = c('A','B'),label_size = 20)
print(output)
Run Code Online (Sandbox Code Playgroud)

代码生成此图. 在此输入图像描述

如您所见,水平轴既不匹配,也不匹配面板的上边缘.

这个论点aligncowplot不方位图工作.

有任何想法吗?

r ggplot2 cowplot

18
推荐指数
2
解决办法
2487
查看次数

使用和不使用图例对齐多个ggplot图

我正在尝试使用ggplot绘制一个比较两个变量的绝对值的图表,并显示它们之间的比率.由于比率是无单位且值不是,我不能在同一个y轴上显示它们,所以我想垂直堆叠为两个单独的图形,对齐的x轴.

这是我到目前为止所得到的:

在此输入图像描述

library(ggplot2)
library(dplyr)
library(gridExtra)

# Prepare some sample data.
results <- data.frame(index=(1:20))
results$control <- 50 * results$index
results$value <- results$index * 50 + 2.5*results$index^2 - results$index^3 / 8
results$ratio <- results$value / results$control

# Plot absolute values
plot_values <- ggplot(results, aes(x=index)) +
  geom_point(aes(y=value, color="value")) +
  geom_point(aes(y=control, color="control"))

# Plot ratios between values
plot_ratios <- ggplot(results, aes(x=index, y=ratio)) +
  geom_point()

# Arrange the two plots above each other
grid.arrange(plot_values, plot_ratios, ncol=1, nrow=2)
Run Code Online (Sandbox Code Playgroud)

最大的问题是第一个图右侧的图例使其大小不同.一个小问题是我不想在顶部的图上显示x轴名称和刻度线,以避免混乱并清楚地表明它们共享同一个轴.

我看过这个问题及其答案:

在ggplot中对齐绘图区域

不幸的是,这两个答案都不适合我.刻面似乎不太合适,因为我希望我的两个图形具有完全不同的y刻度.操纵ggplot_gtable返回的维度似乎更有希望,但我不知道如何解决这两个图表具有不同数量的单元格的事实.天真复制该代码似乎不会改变我的案例的结果图维度.

这是另一个类似的问题:

在ggplot中对齐图的危险

问题本身似乎提出了一个很好的选择,但是如果表格的列数不同,则rbind.gtable会抱怨,这就是传说中的情况.也许有一种方法可以插入第二个表中的额外空列?或者一种方法来抑制第一个图形中的图例,然后将其重新添加到组合图形中?

r ggplot2

9
推荐指数
2
解决办法
5285
查看次数

在gtable对象中设置宽度会折叠图; 这曾经工作但它不再存在.

以下代码用于工作但不再适用.有人知道发生了什么事吗?必须对基础gtable代码进行一些更改.

require(cowplot) # for plot_grid()
require(grid) # for unit_max()

# make two plots
plot.iris <- ggplot(iris, aes(Sepal.Length, Sepal.Width)) + 
  geom_point() + facet_grid(. ~ Species) + stat_smooth(method = "lm") +
  background_grid(major = 'y', minor = "none") + 
  panel_border()
plot.mpg <- ggplot(mpg, aes(x = cty, y = hwy, colour = factor(cyl))) + 
  geom_point(size=2.5)

g.iris <- ggplotGrob(plot.iris) # convert to gtable
g.mpg <- ggplotGrob(plot.mpg) # convert to gtable

iris.widths <- g.iris$widths[1:3] # extract the first three widths, 
                                  # corresponding to left margin, y …
Run Code Online (Sandbox Code Playgroud)

r ggplot2 gtable cowplot

4
推荐指数
1
解决办法
665
查看次数

使用 grid.arrange 缩小和对齐图

我有三个图,我想堆叠它们,缩小底部的 2 个,并确保它们垂直对齐。我可以做一个或另一个,但不能同时做。正如你在图 1 中看到的,这些图是垂直对齐的,但我需要缩小底部的两个;在图 2 中,底部的两个已缩小,但未垂直对齐。

如何缩小底部的两个图并确保所有图都垂直对齐?

下面是一个例子:

ggplot:

library(gridExtra)
library(ggplot2)
library(cowplot)
a <- ggplot(data = diamonds, mapping = aes(y = carat, x = price)) + geom_line()
b <- ggplot(data = diamonds, mapping = aes(x = clarity)) + geom_bar()
c <- ggplot(data = diamonds, mapping = aes(x = color)) + geom_bar()
Run Code Online (Sandbox Code Playgroud)

情节 1:

plot_grid(a, b, c, labels=c("", "", ""), ncol = 1, nrow = 3, align = "v")
Run Code Online (Sandbox Code Playgroud)

在此处输入图片说明

情节 2:

grid.arrange(a,b,c, ncol = 1, nrow = 3, widths = …
Run Code Online (Sandbox Code Playgroud)

r ggplot2

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

标签 统计

r ×7

ggplot2 ×6

cowplot ×2

gtable ×2

gridextra ×1

knitr ×1

latex ×1

subfigure ×1