5

在研究这个答案时,我尝试geom_image()ggimage包中绘制图像条,但无法使其工作。geom_image()修改图像的纵横比,我不知道如何阻止它(或者这是否可能)。我也不清楚用什么单位size来衡量。从代码的行为方式来看npc,无论 ggplot2 坐标系如何,它可能位于从 0 到 1 的坐标中?

这是我使用的代码:

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)

这是生成的图像:

在此处输入图像描述

图像应该是这样的:

在此处输入图像描述

注意:这是一个专门关于 ggimage 行为的问题。我知道如何使用其他方法生成正确的图像,例如使用draw_image()来自 cowplot。

4

2 回答 2

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

会产生

在此处输入图像描述

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

于 2017-11-24T21:44:44.880 回答
2

一个相当“原始”的解决方案:

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)

在此处输入图像描述

于 2017-11-24T21:49:14.243 回答