我正在尝试绘制使用TraMineR
函数通过plot_grid()
包创建的“状态序列对象”的多个图。我的主要问题是,无法将使用seqplot()
函数创建的绘图存储在列表中。我的问题不是关于how to position the legend or "sub"plots,而是关于如何在网格中实际绘制seqplots。
我将ggscatter绘图存储在一个列表中,然后将该列表传递给plot_grid()函数-因此,我相对确定这通常可以正常工作。我认为问题主要是由seqplot()
产生的对象类型。我尝试使用as.ggplot()
函数存储图表,该函数不起作用(下面的示例A)。
或多或少地使用recordPlot()
函数。不过看起来不太好(下面的示例B + C)。
library(TraMineR)
library(ggplotify)
data(biofam)
biofam.lab <- c("Parent", "Left", "Married", "Left+Marr",
"Child", "Left+Child", "Left+Marr+Child", "Divorced")
biofam.seq <- seqdef(biofam[1:600,], 10:25, labels=biofam.lab)
# Example A ---------------------------------------------------------------
# not even able to store the plot
plot.list <- list()
plot.list[[1]] <- as.ggplot(seqplot(biofam.seq, type = "I", with.legend = FALSE, sortv = "from.start"))
# Example B and C ---------------------------------------------------------
plot.list <- list()
seqplot(biofam.seq, type = "I", with.legend = FALSE, sortv = "from.start")
plot.list[[1]] <- recordPlot()
seqplot(biofam.seq, type = "I", with.legend = FALSE, sortv = "from.start")
plot.list[[2]] <- recordPlot()
seqplot(biofam.seq, type = "I", with.legend = FALSE, sortv = "from.start")
plot.list[[3]] <- recordPlot()
seqplot(biofam.seq, type = "I", with.legend = FALSE, sortv = "from.start")
plot.list[[4]] <- recordPlot()
# Example B
plot_grid(plotlist = plot.list, ncol = 2)
# Example C
plot_grid(
plot_grid(plotlist = plot.list, ncol = 2),
plot_grid(plotlist = plot.list, ncol = 2)
)
我想相对自由地放置要绘制在网格中的实际元素。例如,我想在5 x 3的网格中保存包含13个这样的图和图例的页面-如示例所示。这就是为什么我认为与例如par(mfrow = c(5,3))
相比,plot_grid()可以更好地工作的原因。另外,使用par()
会收到“ plot.new()中的错误:图形边距太大”。
答案 0 :(得分:3)
seqplot
在内部使用基础plot
。因此,使用layout
绘制多个图形会更好。您只需制作一个布局矩阵,然后绘制一个绘图即可。图例seqlegend
也可以视为情节。这是一个数据示例和四个带有图例的绘图。
layout(matrix(c(1, 2, 2, 3:5), ncol=3, byrow=TRUE))
layout.show(5) # this line is just to get the preview below where the plots will be placed
seqplot(biofam.seq, type="I", with.legend=FALSE, sortv="from.start")
seqlegend(biofam.seq, cex=.9, ncol=5, position="bottom") # legend
seqplot(biofam.seq, type="I", with.legend=FALSE, sortv="from.start")
seqplot(biofam.seq, type="I", with.legend=FALSE, sortv="from.start")
seqplot(biofam.seq, type="I", with.legend=FALSE, sortv="from.start")
当然,要获得正确的尺寸,请使用例如pdf
或png
设备,如this answer所述。