Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/70.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R ggimage包中的geom_image()是否可以保留图像纵横比?_R_Ggplot2_Ggimage - Fatal编程技术网

R ggimage包中的geom_image()是否可以保留图像纵横比?

R ggimage包中的geom_image()是否可以保留图像纵横比?,r,ggplot2,ggimage,R,Ggplot2,Ggimage,在研究时,我试图通过包中的geom_image()绘制图像条,但无法使其工作geom_image()修改图像的纵横比,我不知道如何阻止它这样做(或者这是否可能)。我也不清楚测量的单位是什么。从代码的行为来看,它可能位于从0到1的npc坐标中,而不管ggplot2坐标系是什么 以下是我使用的代码: require(ggimage) df_img <- data.frame(phase = c("Interphase", "Prophase", "Metaphase", "Anaphase",

在研究时,我试图通过包中的
geom_image()
绘制图像条,但无法使其工作
geom_image()
修改图像的纵横比,我不知道如何阻止它这样做(或者这是否可能)。我也不清楚测量的单位是什么。从代码的行为来看,它可能位于从0到1的
npc
坐标中,而不管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)
require(ggimage)
df_img
将产生

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

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

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)

p Re:从URL读取图像:我认为这两种方法都有优点。如果你想使用图像而不是点,在这里你会多次画同一幅图像,那么很明显,每次重读都是不好的。然而,对于仅向绘图添加少量图像的用例,如此处所示,要求用户设置一个单独的比例,将值映射到图像文件似乎过于复杂。我认为您的“调整大小后不显示”声明意味着我的问题的答案是“否”。因此,我将继续接受你的回答。
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)