我正在使用ggplot2
创建两个不同的x,y图。我希望y轴的比例相同(例如,在两个图中0到10之间的距离是相同的)但每个图/图的长度是不同的(如果一个图变为20,另一个图到50,到50的那个应该更大)。
facet_Grid
不是一个很好的选择,因为我有超过一百个不同的情节。
示例数据:
dat1 <- data.frame(replicate(2,sample(0:20,10,rep=TRUE)))
dat2 <- data.frame(replicate(2,sample(0:60,10,rep=TRUE))
图1:y列数据的范围为0到20.x标度为0到100
曲线2:y列数据的范围为0至60.x标度为0至100
标准情节:
ggplot(data = dat1, aes (x=X1, y= X2)) + xlim(0,100)
ggplot(data = dat2, aes (x=X1, y= X2)) + xlim(0,100)
我得到两个相同大小的图,但它们在y轴上的比例不同。
如果我对y施加限制以迫使它们相同:
ggplot(data = dat1, aes (x=X1, y= X2)) + xlim(0,100) + ylim(0,60)
ggplot(data = dat2, aes (x=X1, y= X2)) + xlim(0,100) + ylim(0,60)
第一块地块有20到60之间的浪费空间,我不想要。
如何在输出图像中保持一致的比例尺寸,同时具有不同的轴限制(在这种情况下,不同的绘图高度)?我需要它们在打印页面上具有相同的比例,但不同的高度。
有什么想法吗?使用scale_y_continuous
,coord_equal
等进行游戏并没有真正让我感到满意。
示例我试图制作的模型,但作为单独的输出文件。在每个图中,y轴上的1cm在多个图之间是相同的:
答案 0 :(得分:2)
也许正在寻找这样的事情?
df1 <- data.frame(x= rep(1:10,10), y = 1:100)
df
newdf <- rbind(data.frame(df1[1:60,],df="df1"),data.frame(df1[1:20,],df="df2"))
dplyr
require(dplyr)
newdf <- newdf %>% group_by(df) %>% mutate(ymax = max(y))
geom_rect()
ggplot(newdf) +
geom_rect(fill=NA,colour="grey",aes(xmin=0,xmax=max(x),ymin=0,ymax=ymax)) +
facet_grid(. ~ df, margins = FALSE) + geom_line(aes(x,y))
一个名为thmEls
的非常有限的主题对象示例。
require(grid)
require(ggplot2)
thmEls <-
theme(
# PARENT ----------------------------------------------
# line = element_blank(),
rect = element_rect(fill="white",colour="gray40", size=0.35, linetype=1),
# text = element_blank(),
# title = NULL,
# axis.title = NULL,
# AXIS -------------------------------------------------
# axis.title.x = element_blank(),
axis.title.y = element_blank(),
# axis.text = element_blank(),
# axis.text.x = element_blank(),
axis.text.y = element_blank(),
# axis.ticks = element_blank(),
# axis.ticks.x = element_blank(),
axis.ticks.y = element_blank(),
# axis.ticks.length = element_blank(),
# axis.ticks.margin = element_blank(),
# axis.line = element_blank(),
# axis.line.x = element_blank(),
# axis.line.y = element_blank(),
# LEGEND ----------------------------------------------
# legend.background = element_blank(),
# legend.key = element_blank(),
# legend.key.size = element_blank(),
# legend.key.width = element_blank(),
# legend.text = element_blank(),
# legend.text.align = element_blank(),
# legend.position = element_blank(),
# legend.direction = element_blank(),
# legend.justification = element_blank(),
# legend.box = element_blank(),
# legend.box.justification = element_blank(),
# PANEL ------------------------------------------------
# ,size=0.3 from panel.background
panel.background = element_blank(),
# panel.border = element_blank(),
panel.margin = unit(c(0.125),"lines"),
# panel.grid = element_blank(),
# panel.grid.major = element_blank(),
# panel.grid.minor = element_blank(),
# panel.grid.major.x = element_blank(),
panel.grid.major.y = element_blank(),
panel.grid.minor.x = element_blank(),
panel.grid.minor.y = element_blank(),
# PLOT ------------------------------------------------
plot.background = element_blank(),
plot.title = element_blank(),
plot.margin = unit(c(0.3,0.3,0.15,0.15),"lines"),
# STRIP -----------------------------------------------
strip.background = element_blank(),
strip.text = element_blank(),
# strip.text.x = element_blank(),
# strip.text.y = element_blank(),
complete = FALSE)
将此添加到我们的情节中:
ggplot(newdf) +
geom_rect(fill=NA,colour="grey",aes(xmin=0,xmax=max(x),ymin=0,ymax=ymax)) +
facet_grid(. ~ df, margins = FALSE) + geom_line(aes(x,y)) +
thmEls
给出: