我有一个png格式的工厂布局,如下所示。 我有项目移动活动数据与坐标(从(0,0)开始,到(100,100)结束)像:
x y
0 4
2 5
4 100
(0,4)表示在此位置显示的项目,我想绘制一个点。 (0,100)表示右下端点。
如果频繁访问,我预计某些区域颜色会更深。
如何将活动数据绘制成图片文件,其中正确的比例符合图片的大小?
答案 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))
答案 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")
请注意,我首先使用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")