使用ggplot在图像上绘制带图例的图表

5
我想使用ggplot2将OHS事件映射到医院楼层平面图上。我已经尝试将这张非地理地图读入ggimage中。

ICU Floor Plan

到目前为止,我已经尝试了以下方法来处理我拥有的数据集(14462个观测值)。

示例数据集

toy <- data.frame(patient_ID = c(1001,1001,1002,1003,1004), 
               SEX = c("M","M","F","F","F"),
              phenotype = c("Psychiatric","Psychiatric", "Cardio",
                            "Cancer","Psychiatric"),
                            x = c(0.5737, 0.5737, 0.6968, 0.4704, 0.6838),
                            y= c(0.3484, 0.3484, 0.62, 0.5216, 0.2486))

我尝试将文件作为光栅图读取,然后使用ggmaps,但困难在于没有图例。

library(ggmap)
library(png)
library(ggplot2)
library(data.table)

toy <- fread("toy.csv")

# read in image 

r <- readPNG("ICU-crop.png")

#use ggimage to convert to plot and add gender
ggimage(r, scale_axes = TRUE) +
  geom_point(aes(x = x, y = y, colour = SEX), data = toy,
             size = I(1), fill = NA)

我希望能使用ggplot,但需要图例。我不确定在PNG上使用ggplot的其他方法。

1个回答

5

这个的真正“魔力”就是在调用 ggimage() 时使用 fullpage=FALSE,但是您稍微需要清理一下轴:

ggimage(r, fullpage = FALSE, scale_axes = TRUE) +
 geom_point(aes(x = x, y = y, colour = SEX), 
            data = toy, size = I(1), fill = NA) +
  labs(x=NULL, y=NULL) +
  theme(axis.text=element_blank()) +
  theme(axis.ticks=element_blank())

在此输入图片描述

您应该清理一下图例,并建议将基础图像轻微减淡,因为它与您要叠加的颜色之间的对比度很难看到(除非它们是大型对象)。


感谢您提供的解决方案以及有关可视化改进的额外建议。一定会按照建议更改散点图的大小和颜色。 - monkeyshines

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接