2017-10-20 54 views
0

说我有一个数据帧,并希望做图如何指定GGPLOT2独立轴的曲线图的尺寸标注

df <- melt(iris) 

p <- ggplot(data = df, aes(x = Species, y = value)) + 
     geom_boxplot() + theme(aspect.ratio = 1) 

我则想用ggsave()保存的这一个pdf情节

ggsave(plot = p, width = 3, height = 3, dpi = 300, filename = "not squished axis.pdf") 

enter image description here

的问题是,我想指定的情节本身的尺寸,但独立的,这样的情节W的下方指定轴标签根据轴的绝对长度而不同的尺寸和尺寸。

q <- ggplot(data = df, aes(x = Species, y = (value)*10000000)) + 
     geom_boxplot() + theme(aspect.ratio = 1) 

ggsave(plot = q, width = 3, height = 3, dpi = 300, filename = "squished axis.pdf") 

enter image description here

有没有一种方法可以轻松地做到这一点?

这里是一个曲线图的一个例子接近我想在轴长度的术语:

enter image description here

唯一的问题是,通过改变高宽比,我最终压扁在y使x轴更接近于均匀长度...

+0

我不明白的问题。 “独立于轴标签”的含义是什么?如果在'ggsave'中指定'height'和'width',绘图将*具有相同的尺寸(以像素/英寸为单位)和(取决于数据)不同的轴范围。你可以包含你想要实现的模型/样本图吗? –

+0

上述两个图中轴的绝对长度不同,因为第二个图中的y轴中断标签比第一个图中的要长。我希望能够具有不同的长度轴标签,但保持相同的x轴和y轴长度。我已经更新了第三个情节的问题,看起来更接近我想实现的目标 –

+0

@MauritsEvers我无法制作我想要的代表情节,但本质上我想要绘制区域的大小(即,,以x和y轴为单位的长度(以英寸为单位))在由于编号格式较长而导致y轴标签较长的图之间保持一致 –

回答

0

我不明白你在做什么,所以这在黑暗中有点刺伤。

可以使用使用facet_wrap相同的比例显示两个地块:

# Your sample data 
df <- list(
    one = melt(iris), 
    two = with(melt(iris), cbind.data.frame(Species, variable, value * 1000))); 
df <- melt(df); 

ggplot(df, aes(x = Species, y = value)) + 
    geom_boxplot() + theme(aspect.ratio = 1) + 
    facet_wrap(~ L1); 

enter image description here

或允许y标尺,为各个方面自由变化。

ggplot(df, aes(x = Species, y = value)) + 
    geom_boxplot() + theme(aspect.ratio = 1) + 
    facet_wrap(~ L1, scales = "free_y"); 

enter image description here

您可以调整小面的网格布局,通过指定用nrowncol列或行的数。

因此,例如,两个地块的垂直放置,你可以做

ggplot(df, aes(x = Species, y = value)) + 
    geom_boxplot() + theme(aspect.ratio = 1) + 
    facet_wrap(~ L1, ncol = 1, scales = "free_y"); 

enter image description here

+0

谢谢,是的,小平面包装确实导致了绘图空间的均匀性,但我真的很想分开绘制这些图。以最后一个例子作为参考,注意两个图的灰色绘图区域的长度是相同的,即使值8000,6000,4000等比8,6,4等值更远。但是,您可以当我看到这些pdf时,在我的例子中看到,x轴的长度被挤压以适应y轴值的长度。 –

+0

没有指定要用ggsave()保存的图的“高度”和“宽度”尺寸,我想要防止轴标签挤压绘图区域,但是,我希望所有的图都能保存与绘图区域(x轴的长度和y轴的长度)是一定的长度 –

+0

恐怕在这种情况下,您最好的选择是'facet_wrap'。说实话,你的绘图要求对我来说似乎很奇怪;这似乎是一个纯粹的美学问题。一个可以通过'facet_wrap'轻松解决的问题。出于某种原因你不想使用它。无论如何。祝你好运,我没有进一步的帮助,我可以提供。 –

相关问题