可以使用ggimage包中的geom_image()来保持图像宽高比吗?

时间:2017-11-24 20:43:18

标签: r ggplot2 ggimage

在研究this answer时,我尝试从ggimage包中通过geom_image()绘制图像条,但无法使其正常工作。 geom_image()修改了图片宽高比,我不知道如何阻止它(或者甚至是否可能)。对于size测量的单位,我也不清楚。根据代码的行为方式,可能它在npc坐标中从0到1运行,无论ggplot2坐标系如何?

以下是我使用的代码:

require(ggimage)
df_img <- data.frame(phase = c("Interphase", "Prophase", "Metaphase", "Anaphase", "Telophase"),
                     image = c("http://www.microbehunter.com/wp/wp-content/uploads/2009/lily_interphase.jpg",
                               "http://www.microbehunter.com/wp/wp-content/uploads/2009/lily_prophase.jpg",
                               "http://www.microbehunter.com/wp/wp-content/uploads/2009/lily_metaphase2.jpg",
                               "http://www.microbehunter.com/wp/wp-content/uploads/2009/lily_anaphase2.jpg",
                               "http://www.microbehunter.com/wp/wp-content/uploads/2009/lily_telophase.jpg"))
df_img$phase <- factor(df_img$phase, levels=df_img$phase)

ggplot(df_img, aes(x = phase, y = 0, image = image)) + geom_image(size = 0.18)

这是结果图像:

enter image description here

这就是图像的样子:

enter image description here

注意:这是一个特别关于ggimage行为的问题。我知道如何使用其他方法生成正确的图像,例如使用牛皮画中的draw_image()

2 个答案:

答案 0 :(得分:4)

ggplot(df_img, aes(x = phase, y = 0.25, image = image)) +
  geom_image(size = 0.5, by="height")+
  scale_size_identity()

将产生

enter image description here

如果指定了by,则将数据映射并解释为数据空间中的npc,作为宽度或高度,以及为当前设备维护的纵横比(不是在调整大小后)。如果尺寸为Inf,则图片会拉伸以填充整个面板。

答案 1 :(得分:0)

一个相当&#34; raw&#34;溶液:

p <- ggplot(df_img, aes(x = phase, y = 0, image = image)) + 
     geom_image(size = 0.18) +  coord_fixed()

g <- ggplotGrob(p)   
for (k in 1:length(g$grobs[[6]]$children[[3]]$children)) {
  g$grobs[[6]]$children[[3]]$children[[k]]$height <- unit(0.8,"native")
}
library(grid)
grid.draw(g)

enter image description here