图像作为轴刻度ggplot

Eli*_*iaz 6 r ggplot2 ggridges

我一直在寻找一种在 ggplot2 中使用 png 图像作为轴刻度的方法,更准确地说是在 我阅读过的ggridges 中,并试图复制这些帖子的答案,但是从那时起,软件包在语法上发生了很大变化发布日期:

使用额外的刻度和标签注释 ggplot 如何在 ggplot2 中使用通过 grImport 导入的图形作为轴刻度标签(使用网格函数)? 图标作为 R 中的 x 轴标签 - ggplot2

我想将 png(或其他类型的)图像添加到刻度标签,而不是标签 virginica、setosa 和 versicolor;

library(ggridges)
library(ggplot2)
ggplot(iris, aes(x = Sepal.Length, y = Species)) + geom_density_ridges()
Run Code Online (Sandbox Code Playgroud)

RLa*_*ave 4

cowplot包使这变得更容易一些。

构建情节:

library(ggridges)
library(ggplot2)

p <- ggplot(iris, aes(x = Sepal.Length, y = Species)) + geom_density_ridges()
Run Code Online (Sandbox Code Playgroud)

加载图像并用于axis_canvas()构建一条垂直图像:

library(cowplot)

pimage <- axis_canvas(p, axis = 'y') + 
  draw_image("https://upload.wikimedia.org/wikipedia/commons/thumb/9/9f/Iris_virginica.jpg/295px-Iris_virginica.jpg", y = 2.5, scale = 0.5) +
  draw_image("https://upload.wikimedia.org/wikipedia/commons/thumb/4/41/Iris_versicolor_3.jpg/320px-Iris_versicolor_3.jpg", y = 1.5, scale = 0.5) +
  draw_image("https://upload.wikimedia.org/wikipedia/commons/thumb/5/56/Kosaciec_szczecinkowaty_Iris_setosa.jpg/450px-Kosaciec_szczecinkowaty_Iris_setosa.jpg", y = 0.5, scale = 0.5)


# insert the image strip into the plot
ggdraw(insert_yaxis_grob(p, pimage, position = "left"))
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

没有axis.text.y

p <- ggplot(iris, aes(x = Sepal.Length, y = Species)) + geom_density_ridges() +
  theme(axis.text.y = element_blank())
ggdraw(insert_yaxis_grob(p, pimage, position = "left"))
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

您还可以删除垂直线,目前我找不到将图像带放在轴线左侧的方法。