我想为我的绘图使用背景png并更改循环中绘图点的数据集。不幸的是,print(qplot_object)重新打印所有内容而不仅仅是更改数据,因此背景再次绘制,并且缓慢闪烁:(
我正在使用annotation_custom(g, xmin=-Inf, xmax=Inf, ymin=-Inf, ymax=Inf)
作为背景和qplot(ggplot确实不起作用,因为那时图片不在后台,而是在数据前面)。此外,opts(panel.background=function(...)picture)
的旧版本不再有效。
这里是代码:
library(ggplot2)
library(gridExtra) # for ebimageGrob
require(png)
require(grid)
img <- readPNG("bla.png")
g <- rasterGrob(img, interpolate=TRUE)
mdat <- data.frame(100,100)
colnames(mdat ) <- c("X","Y")
plot_field <- qplot(mdat[,1],mdat[,2], geom="blank") +
coord_cartesian(xlim = c(0, 1200),ylim = c(0, 799)) +
annotation_custom(g, xmin=-Inf, xmax=Inf, ymin=-Inf, ymax=Inf) +
geom_point()+ theme_bw() +
theme(
panel.grid.major=element_blank(),
panel.grid.minor=element_blank(),
panel.margin.x = unit(12,"cm"),
panel.margin.y = unit(7.99,"cm"),
aspect.ratio = 799/1200
)
print(plot_field)
for (i in 1:100){
mdat <- data.frame(100+i*5,100+i)
colnames(mdat) <- c("X","Y")
print(plot_field) # this works, but replots all, so its flashing all the time and slow,
#because of the background png (annotation_custom)
}
我希望有人有一个想法,也许有任何动态绘图类或画布在R中绘制。代码的想法实际上是加载一个足球场,然后运行模拟并更新球员的位置每一步。因此,qlot不应该一直闪烁,只是玩家应该移动,也许我可以处理单独的层?
答案 0 :(得分:0)
停止闪烁的一种方法是防止屏幕更新,直到完成所有绘图。尝试
for (i in 1:100){
mdat <- data.frame(100+i*5,100+i)
colnames(mdat) <- c("X","Y")
dev.hold() #pause device update
print(plot_field)
dev.flush() #send plot to device
}