在坐标为

时间:2017-11-13 20:41:26

标签: r plot ggplot2

我有一个png格式的工厂布局,如下所示。 我有项目移动活动数据与坐标(从(0,0)开始,到(100,100)结束)像:

x y
0 4
2 5
4 100

(0,4)表示在此位置显示的项目,我想绘制一个点。 (0,100)表示右下端点。

如果频繁访问,我预计某些区域颜色会更深。

如何将活动数据绘制成图片文件,其中正确的比例符合图片的大小?

enter image description here

2 个答案:

答案 0 :(得分:3)

library(png)
library(grid)
library(ggplot2)

d <- data.frame(x=c(0,2,4), y= c(4,5,100))

r <- png::readPNG('factory.png')
rg <- grid::rasterGrob(r, width=unit(1,"npc"), height=unit(1,"npc"))

ggplot(d, aes(x,y)) + 
  annotation_custom(rg) +
  geom_point(colour="red") +
  scale_x_continuous(expand=c(0,0), lim=c(0,100)) +
  scale_y_continuous(expand=c(0,0), lim=c(0,100)) +
  theme_void() +
  theme(aspect.ratio = nrow(r)/ncol(r)) 

enter image description here

答案 1 :(得分:0)

如果将图像作为光栅图像加载到R中,则可以使用rasterImage功能绘制图像。

## Your data
PTS = read.table(text="x y
0 4
2 5
4 100", 
header=TRUE)

library(png)
IM = readPNG(file.choose())
plot(NULL, xlim=c(0,100), ylim=c(0,100), axes=FALSE, xlab="", ylab="")
rasterImage(IM,0,0,100,100)
points(PTS[,2:1], pch=20, col="red")

PNG IMage

请注意,我首先使用y坐标,然后使用points函数的x来匹配您的语句“(0,100)表示右下端点。”

如果您想通过较暗的颜色显示高流量,请使用透明色,以便颜色的深度相加。你的三点不足以证明这一点,所以我编写了一些其他虚假数据来说明这一点。

x = c(rnorm(400,40,10), rnorm(100,40,5))
y = 43 + rnorm(500,0,1)
plot(NULL, xlim=c(0,100), ylim=c(0,100), axes=FALSE, xlab="", ylab="")
rasterImage(IM,0,0,100,100)
points(y,x, pch=20, col="#33333322")

Point Density