df
是一个包含10行和5列的数据框。行名依次为'1','2',...,'10',而列名依次为'A',B',...,'E'。 df
的单元格中的值是数字。每列表示将标记每行的数字映射到相应单元格值的函数。我想在同一个画布上绘制五个散点图,描绘五列定义的函数。另外,对于每个函数,我希望每个点通过线连接到它的两个“邻居”(在左边和右边)。
为了在单独的画布上绘制五个函数,需要如何修改代码?
谢谢。
尝试解决简化问题。
> row_labels <- (1 : 10)
> col_labels <- (1 : 3)
> raw_data <- outer(row_labels, col_labels, FUN = '^')
> df <- as.data.frame(raw_data)
> dimnames(df) <- list(row_labels, col_labels)
> plot(row_labels, df[['1']])
> lines(row_labels, df[['1']])
> points(row_labels, df[['2']])
> lines(row_labels, df[['2']])
> points(row_labels, df[['3']])
> lines(row_labels, df[['3']])
此解决方案存在问题:
第二个和第三个功能图超出了画布。
是否有更简洁,更优雅的方式来完成此任务?
有没有办法在短而优雅的方式上在三个独立的画布上创建三个地块?
答案 0 :(得分:1)
# your data
raw_data <- as.data.frame(outer(1:10, 1:3, FUN = '^'))
colnames(df) <- c("A","B","C")
#plot it
plot(df$A,type="n",ylim=range(df),ylab="") # just creates "canvas"
lapply(df,points,type="b") # this does the plotting
编辑:对OP评论的回应。
rows <- c(1, 3, 7, 8, 16, 19, 20, 24, 28, 30)
df <- as.data.frame(outer(rows, 1:3, FUN = '^'))
colnames(df) <- c("A","B","C")
rownames(df) <- rows
plot(df$A,type="n",ylim=range(df),xlim=range(rows),ylab="")
lapply(df,points,x=as.integer(rownames(df)),type="b")
par(mfrow=c(1,3))
lapply(df,plot,x=as.integer(rownames(df)),type="b",ylab="")
你应该知道上面折磨的语法完全是因为x值在行名中 - 这是一个非常非常糟糕的主意。