spatstat
の関数を使用しcolourmap
てカラースケールをプロットに生成する関数があります。このcolourmap
関数は、image
関数を使用してカラー スケールをプロットします。次に例を示します。
library(spatstat)
set.seed(1)
dat <- data.frame(x = 1:10, y = 10:1, z = rnorm(10,6,8))
plot_this <- function(x,y,z) {
colpal <- colorRampPalette(c("red", "blue"), bias=1)(20)
colmap <- colourmap(colpal, range = range(z))
layout(matrix(c(1,2), nrow = 1), widths = c(9,1))
par(mar = c(4, 4, 2.5, 1) + 0.1)
plot(x, y, type = "p", bg = colmap(z), pch = 21, cex = 3)
par(mar=c(1,0.5,3,2))
plot(colmap, vertical = TRUE)}
plot_this(dat$x, dat$y, dat$z)
これらのプロットのいくつかを並べてプロットしたいのですが、私の試みは失敗します:
par(mfcol = c(1,2))
plot_this(dat$x, dat$y, dat$z)
plot_this(dat$x, dat$y, dat$z)
dev.off()
layout(matrix(c(1,2), nrow = 1))
plot_this(dat$x, dat$y, dat$z)
plot_this(dat$x, dat$y, dat$z)
dev.off()
library(gridExtra)
grid.arrange(grob(plot_this(dat$x, dat$y, dat$z)), grob(plot_this(dat$x, dat$y, dat$z)), ncol = 2)
と互換性がないとポール・マレル博士が言っているトレッドを見つけました。しかし、私は問題が解決可能であると信じています。またはを使用してプロットできるようにコードを改善するにはどうすればよいですか?image.plot
layout
layout
par
次のようなことをしたいのですが、各プロットのカラースケールを個別に含めるには:
plot_this2 <- function(x,y,z) {
colpal <- colorRampPalette(c("red", "blue"), bias=1)(20)
colmap <- colourmap(colpal, range = range(z))
plot(x, y, type = "p", bg = colmap(z), pch = 21, cex = 3)
}
layout(matrix(c(1,2), nrow = 1))
plot_this2(dat$x, dat$y, dat$z)
plot_this2(dat$x, dat$y, dat$z)
編集: @IShouldBuyABoat は を調べることを提案しましgridBase
た。ベースと ggplot グラフィックスを混在させるための良い SO 回答がありますgrid
が、プロットを作成するための機能の組み合わせが見つかりません。ここに試用版の 1 つがあります:
library(gridBase)
plot_this <- function(x,y,z) {
plot.new()
colpal <- colorRampPalette(c("red", "blue"), bias=1)(20)
colmap <- colourmap(colpal, range = range(dat$z))
gl <- grid.layout(nrow=1, ncol=2, widths = c(9,1))
vp.1 <- viewport(layout.pos.col=1, layout.pos.row=1)
vp.2 <- viewport(layout.pos.col=2, layout.pos.row=1)
pushViewport(viewport(layout=gl))
pushViewport(vp.1)
par(new=TRUE, fig=gridFIG(), mar = c(4, 4, 2.5, 1) + 0.1)
plot(dat$x, dat$y, type = "p", bg = colmap(dat$z), pch = 21, cex = 3)
popViewport(1)
pushViewport(vp.2)
par(new=TRUE, fig=gridFIG(), mar = c(1,0.5,3,2))
print(plot(colmap, vertical = TRUE))
popViewport(0)}
graphics.off()
plot.new()
gl <- grid.layout(ncol = 2, nrow = 1)
vp.1 <- viewport(layout.pos.col=1, layout.pos.row=1)
vp.2 <- viewport(layout.pos.col=2, layout.pos.row=1)
pushViewport(viewport(layout=gl))
pushViewport(vp.1)
plot_this(dat$x, dat$y, dat$z)
popViewport()
pushViewport(vp.2)
par(new=TRUE, fig=gridFIG())
plot_this(dat$x, dat$y, dat$z)
popViewport(1)