使用 layout() 与一个图形在 R 中具有多层的问题
Issue using layout() with one figure having multiple layers in R
我在使用 layout() 时遇到了一些严重的问题,在添加一个具有多个图层的图形时,它让我发疯。
我似乎只有在尝试创建的 jpeg 中的其中一个图形上添加图层时才会遇到问题。
布局是 1) 在捕鱼量数据时间序列的顶部有一个简单的线图,在底部有一个 2) 海洋数据层地图的较大图像。
我正在使用 image.plot() 加上等高线 (... add=T) 和箭头 my.symbols(... add=T) 从图书馆 TeachingDemos 制作一系列地图。
数据是从大型 netCDF 文件中切片的。
图像和等高线是溶解氧深度,红色箭头是表面电流。
下面是我的 R 代码,数据通过变量循环 'n':
jpeg(paste(interpdate[n],"DailyDOLayerCenAm.jpg", sep=""), width=1150, height=1000, res=100)
layout(matrix(c(1,2),nrow=2), heights=c(1,3))
#first plot on the top, fish catch data by time, moving each day
par(mar=c(1,4,.3,.5))
plot(Date[15:n],sail$X7.day.Average[15:n], xlim=c(Date[15],Date[350]),
xlab='',ylab='Raises/Trip',ylim=c(0,50), type='l', xaxt='n', lwd=2.5)
axis(1, Date, format(Date, "%b %d"), cex.axis = 1)
abline(18.4,0, lty=2)
points(Date[n],sail$X7.day.Average[n], pch=21, col='black', bg='red',
cex=3)
#second plot, Ocean data
par(mar=c(3,3.7,.5,1))
# layer 1 plot the main layer, interpolated grid O2 minimum depth
image.plot( as.surface( expandgrid, ww),xlim=c(xmin,xmax),
ylim=c(ymin,ymax), ylab="Latitude", xlab="Longitude",main="",
col=pal(256), legend.lab="Depth of O2 Minimum Layer (m)",
zlim=c(20,zlimit), cex=1.5)
#layer 2 add the contours
contour(as.surface( expandgrid, ww),xlim=c(xmin,xmax), ylim=c(ymin,ymax),
col='white', lwd=2, nlevels=10, labcex=1, add=T)
#layer 3 add current arrows
my.symbols(lonx,laty,ms.arrows, angle=theta, r=intensity, length=.06,
add=T,xlim=c(xmin,xmax), ylim=c(ymin,ymax), lwd=2, col="red",
fg="black")
#layer 4add the map of land/countries
plot(newmap, col="GREY", add=T)
#add a point of home port in Guatemala
points(-90.81, 13.93, pch=21, col='black', bg='yellow', cex=3.5)
dev.off()
当我只绘制我的海洋数据时,它绘制得很好:
https://fbcdn-sphotos-f-a.akamaihd.net/hphotos-ak-xap1/t31.0-8/10861076_10101738319375937_3436888929444896713_o.jpg
在 layout() 中绘制它我弄得一团糟,等高线在 x-space 中很好,但在 y space 中被压扁了,箭头和地图覆盖也是如此:
https://scontent-b.xx.fbcdn.net/hphotos-xfp1/t31.0-8/10923795_10101738319625437_7583695382864373718_o.jpg
我通过不使用 imageplot()
而是使用 image()
并添加 Aurélien Madouasse 描述的颜色图例来修复此问题:
https://aurelienmadouasse.wordpress.com/author/aurelienmadouasse/
我从大量海洋数据中循环图像,并在一个函数中创建了一系列绘图。
我的代码(没有数据)在这里,来自一个循环:
jpeg(paste(interpdate[n],"DailyDOLayerCenAm.jpg", sep=""), width=1150,
height=1000, res=100)
layout(matrix(c(1,2),nrow=2), heights=c(1,3))
#first plot on the top, fish catch data by time, moving each day
par(mar=c(1,4,.3,.5))
plot(Date[15:n],sail$X7.day.Average[15:n], xlim=c(Date[15],Date[350]),
xlab='',ylab='Raises/Trip',ylim=c(0,50), type='l', xaxt='n', lwd=2.5)
axis(1, Date, format(Date, "%b %d"), cex.axis = 1)
abline(18.4,0, lty=2)
points(Date[n],sail$X7.day.Average[n], pch=21, col='black', bg='red', cex=3)
#second plot, Ocean data
#plot the main layer, dissolved oxygen minimum depth
#plot the main layer, dissolved oxygen minimum depth
image( as.surface( expandgrid, ww),xlim=c(xmin,xmax),
ylim=c(ymin,ymax),ylab="Latitude", xlab="Longitude",main="", col=pal(256),
zlim=c(20,zlimit), cex=1.5)
#add the contours
contour(as.surface( expandgrid, ww),xlim=c(xmin,xmax), ylim=c(ymin,ymax),
col='white', lwd=2,levels=seq(0,zlimit,10), labcex=1, add=T)
#add sea surface current arrows
my.symbols(lonx,laty,ms.arrows, angle=theta, r=intensity, length=.06,
add=T, xlim=c(xmin,xmax), ylim=c(ymin,ymax), lwd=2, col="red", fg="white")
#add the map of land/countries
plot(newmap, col="GREY", add=T)
#add a point of home port in Guatemala
points(-90.81, 13.93, pch=21, col='black', bg='yellow', cex=3.5)
colr <- pal(256) # colors from 'blues'
legend.col(col = colr, lev = ww) # legend from Aurélien Madouasse:
mtext("Depth of O2 Minimum Layer (m)", 4, line=2.5, font=2)
dev.off()
要查看我正在制作成电影的新图像的情节,请参阅此 link:
https://fbcdn-sphotos-a-a.akamaihd.net/hphotos-ak-xpa1/t31.0-8/10856647_10101738461765587_2760202217270038911_o.jpg
我在使用 layout() 时遇到了一些严重的问题,在添加一个具有多个图层的图形时,它让我发疯。
我似乎只有在尝试创建的 jpeg 中的其中一个图形上添加图层时才会遇到问题。
布局是 1) 在捕鱼量数据时间序列的顶部有一个简单的线图,在底部有一个 2) 海洋数据层地图的较大图像。
我正在使用 image.plot() 加上等高线 (... add=T) 和箭头 my.symbols(... add=T) 从图书馆 TeachingDemos 制作一系列地图。
数据是从大型 netCDF 文件中切片的。
图像和等高线是溶解氧深度,红色箭头是表面电流。
下面是我的 R 代码,数据通过变量循环 'n':
jpeg(paste(interpdate[n],"DailyDOLayerCenAm.jpg", sep=""), width=1150, height=1000, res=100)
layout(matrix(c(1,2),nrow=2), heights=c(1,3))
#first plot on the top, fish catch data by time, moving each day
par(mar=c(1,4,.3,.5))
plot(Date[15:n],sail$X7.day.Average[15:n], xlim=c(Date[15],Date[350]),
xlab='',ylab='Raises/Trip',ylim=c(0,50), type='l', xaxt='n', lwd=2.5)
axis(1, Date, format(Date, "%b %d"), cex.axis = 1)
abline(18.4,0, lty=2)
points(Date[n],sail$X7.day.Average[n], pch=21, col='black', bg='red',
cex=3)
#second plot, Ocean data
par(mar=c(3,3.7,.5,1))
# layer 1 plot the main layer, interpolated grid O2 minimum depth
image.plot( as.surface( expandgrid, ww),xlim=c(xmin,xmax),
ylim=c(ymin,ymax), ylab="Latitude", xlab="Longitude",main="",
col=pal(256), legend.lab="Depth of O2 Minimum Layer (m)",
zlim=c(20,zlimit), cex=1.5)
#layer 2 add the contours
contour(as.surface( expandgrid, ww),xlim=c(xmin,xmax), ylim=c(ymin,ymax),
col='white', lwd=2, nlevels=10, labcex=1, add=T)
#layer 3 add current arrows
my.symbols(lonx,laty,ms.arrows, angle=theta, r=intensity, length=.06,
add=T,xlim=c(xmin,xmax), ylim=c(ymin,ymax), lwd=2, col="red",
fg="black")
#layer 4add the map of land/countries
plot(newmap, col="GREY", add=T)
#add a point of home port in Guatemala
points(-90.81, 13.93, pch=21, col='black', bg='yellow', cex=3.5)
dev.off()
当我只绘制我的海洋数据时,它绘制得很好: https://fbcdn-sphotos-f-a.akamaihd.net/hphotos-ak-xap1/t31.0-8/10861076_10101738319375937_3436888929444896713_o.jpg
在 layout() 中绘制它我弄得一团糟,等高线在 x-space 中很好,但在 y space 中被压扁了,箭头和地图覆盖也是如此: https://scontent-b.xx.fbcdn.net/hphotos-xfp1/t31.0-8/10923795_10101738319625437_7583695382864373718_o.jpg
我通过不使用 imageplot()
而是使用 image()
并添加 Aurélien Madouasse 描述的颜色图例来修复此问题:
https://aurelienmadouasse.wordpress.com/author/aurelienmadouasse/
我从大量海洋数据中循环图像,并在一个函数中创建了一系列绘图。
我的代码(没有数据)在这里,来自一个循环:
jpeg(paste(interpdate[n],"DailyDOLayerCenAm.jpg", sep=""), width=1150,
height=1000, res=100)
layout(matrix(c(1,2),nrow=2), heights=c(1,3))
#first plot on the top, fish catch data by time, moving each day
par(mar=c(1,4,.3,.5))
plot(Date[15:n],sail$X7.day.Average[15:n], xlim=c(Date[15],Date[350]),
xlab='',ylab='Raises/Trip',ylim=c(0,50), type='l', xaxt='n', lwd=2.5)
axis(1, Date, format(Date, "%b %d"), cex.axis = 1)
abline(18.4,0, lty=2)
points(Date[n],sail$X7.day.Average[n], pch=21, col='black', bg='red', cex=3)
#second plot, Ocean data
#plot the main layer, dissolved oxygen minimum depth
#plot the main layer, dissolved oxygen minimum depth
image( as.surface( expandgrid, ww),xlim=c(xmin,xmax),
ylim=c(ymin,ymax),ylab="Latitude", xlab="Longitude",main="", col=pal(256),
zlim=c(20,zlimit), cex=1.5)
#add the contours
contour(as.surface( expandgrid, ww),xlim=c(xmin,xmax), ylim=c(ymin,ymax),
col='white', lwd=2,levels=seq(0,zlimit,10), labcex=1, add=T)
#add sea surface current arrows
my.symbols(lonx,laty,ms.arrows, angle=theta, r=intensity, length=.06,
add=T, xlim=c(xmin,xmax), ylim=c(ymin,ymax), lwd=2, col="red", fg="white")
#add the map of land/countries
plot(newmap, col="GREY", add=T)
#add a point of home port in Guatemala
points(-90.81, 13.93, pch=21, col='black', bg='yellow', cex=3.5)
colr <- pal(256) # colors from 'blues'
legend.col(col = colr, lev = ww) # legend from Aurélien Madouasse:
mtext("Depth of O2 Minimum Layer (m)", 4, line=2.5, font=2)
dev.off()
要查看我正在制作成电影的新图像的情节,请参阅此 link: