我正在尝试使用安排多个地块grid.arrange.它完成了本书的工作,并在致电时:
p1 <- ggplot(subset(mtcars, cyl = 4), aes(wt, mpg, colour = cyl)) + geom_point()
p2 <- ggplot(subset(mtcars, cyl = 8), aes(wt, mpg, colour = cyl)) + geom_point()
grid.arrange(p1, p2, ncol = 2)
Run Code Online (Sandbox Code Playgroud)
我得到两个很好的图,大小对称:

我的图表引用了不同的参数,但它们对组共享相同的颜色编码.所以我想删除除了一个以外的所有传奇,找到一个不错的地方.
但是,当我尝试:
p3 <- ggplot(subset(mtcars, cyl = 8), aes(wt, mpg, colour = cyl)) + geom_point() + guides(colour=FALSE)
grid.arrange(p3, p2, ncol = 2)
Run Code Online (Sandbox Code Playgroud)
没有图例的情节得到(正确)更大:

我想保持大小(作为x轴的长度)在图表中保持相同.
我知道我可以在这里使用faceting,但是我还需要结合使用facet(我认为)很难实现的各种图形.
有可能做到grid.arrange吗?还有其他解决方案吗?
我正在创建一个图表,显示湖水位随时间的变化.我在下面附上了一个简单的例子.我想在图的右侧添加一个刻度(刻度线和注释),以英尺为单位显示高程.我知道ggplot2不会允许两个不同的比例(参见2 y轴的绘图,左边的一个y轴,右边的另一个y轴),但因为这是相同比例的转换,有没有办法做这个?我更喜欢继续使用ggplot2而不必恢复到plot()函数.
library(ggplot2)
LakeLevels<-data.frame(Day=c(1:365),Elevation=sin(seq(0,2*pi,2*pi/364))*10+100)
p <- ggplot(data=LakeLevels) + geom_line(aes(x=Day,y=Elevation)) +
scale_y_continuous(name="Elevation (m)",limits=c(75,125))
p
Run Code Online (Sandbox Code Playgroud) 我正在尝试使用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轴名称和刻度线,以避免混乱并清楚地表明它们共享同一个轴.
我看过这个问题及其答案:
不幸的是,这两个答案都不适合我.刻面似乎不太合适,因为我希望我的两个图形具有完全不同的y刻度.操纵ggplot_gtable返回的维度似乎更有希望,但我不知道如何解决这两个图表具有不同数量的单元格的事实.天真复制该代码似乎不会改变我的案例的结果图维度.
这是另一个类似的问题:
问题本身似乎提出了一个很好的选择,但是如果表格的列数不同,则rbind.gtable会抱怨,这就是传说中的情况.也许有一种方法可以插入第二个表中的额外空列?或者一种方法来抑制第一个图形中的图例,然后将其重新添加到组合图形中?
我试图使用grobs和gtable将4(ggplot2)图排列成2x2网格.我不知道如何设置宽度,也不知道非1xn或nx1排列.
使用此代码:
data(iris)
a <- ggplot(iris, aes(x=Species, y=Petal.Width)) + geom_boxplot(color="black") + ylab(expression(Foo~Bar~(g~cm^{-3})))
b <- ggplot(iris, aes(x=Species, y=Petal.Length*100)) + geom_boxplot(color="black") + ylab("foobar (mm)")
c <- ggplot(iris, aes(x=Species, y=Sepal.Width)) + geom_boxplot(color="black") + ylab("foobar (%)")
d <- ggplot(iris, aes(x=Species, y=log10(Sepal.Length))) + geom_boxplot(color="black") + ylab("foobar (cm)")
plots <- list(a,b,c,d)
grobs = lapply(plots, ggplotGrob)
g = do.call(rbind, c(grobs, size="first"))
g$widths = do.call(unit.pmax, lapply(grobs, "[[", "widths"))
grid.newpage()
grid.draw(g)
Run Code Online (Sandbox Code Playgroud)
如果我将grid.arrange用于两列,则在4个图上,这些图的宽度不同.
如何将图表绑定到4 x 4排列的gtable中?
# I thought maybe I could cbind, then rbind, but this does not …Run Code Online (Sandbox Code Playgroud) 我正在使用ggplot2进行多重绘图.经过大量调整后,我仍然面临以下问题:
Multiplot是:
我使用以下R代码:
p1 <- ggplot(data = dplots[[1]],aes(timestamp,power/1000))+ geom_line()+
ylab("")+theme(axis.text.x=element_blank(),axis.title.x=element_blank(),axis.ticks.x=element_blank(),plot.margin = unit(c(-0.3,1,-0.3,1), "cm"))+labs(title="room1")
p2 <- ggplot(data = dplots[[2]],aes(timestamp,power/1000))+ geom_line()+
ylab("")+theme(axis.text.x=element_blank(),axis.title.x=element_blank(),axis.ticks.x=element_blank(),plot.margin = unit(c(-0.3,1,-0.3,1), "cm"))+ labs(title="room2")
p3 <- ggplot(data = dplots[[6]],aes(timestamp,power/1000))+ geom_line()+
ylab("")+theme(axis.text.x=element_blank(),axis.title.x=element_blank(),axis.ticks.x=element_blank(),plot.margin = unit(c(-0.3,1,-0.3,1), "cm"))+ labs(title="room3")
p4 <- ggplot(data = dplots[[4]],aes(timestamp,power/1000))+ geom_line()+
ylab("")+theme(axis.text.x=element_blank(),axis.title.x=element_blank(),axis.ticks.x=element_blank(),plot.margin = unit(c(-0.3,1,-0.3,1), "cm"))+ labs(title="room4")
p5 <- ggplot(data = dplots[[5]],aes(timestamp,power/1000))+ geom_line()+
ylab("")+theme(axis.text.x=element_blank(),axis.title.x=element_blank(),axis.ticks.x=element_blank(),plot.margin = unit(c(-0.3,1,-0.3,1), "cm"))+ labs(title="room5")
p6 <- ggplot(data = dplots[[3]],aes(timestamp,power/1000))+ geom_line()+
ylab("")+theme(axis.title.x=element_blank(),axis.ticks.x=element_blank(),plot.margin = unit(c(-0.3,1,-0.3,1), "cm"))+ labs(title="Chiller") +
scale_x_datetime(labels= date_format("%d-%m-%y",tz ="UTC"),breaks = pretty_breaks(8))
grid.arrange(p1,p2,p3,p4,p5,p6,nrow=6,ncol=1,heights=c(0.15,0.15,0.15,0.15,0.15,0.15),left="Power (KW)")
Run Code Online (Sandbox Code Playgroud)
数据集( …