从数据框的列在同一画布上生成多个散点图

时间:2014-11-16 16:37:32

标签: r line scatter-plot

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']])

此解决方案存在问题:

  1. 第二个和第三个功能图超出了画布。

  2. 是否有更简洁,更优雅的方式来完成此任务?

  3. 有没有办法在短而优雅的方式上在三个独立的画布上创建三个地块?

1 个答案:

答案 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值在行名中 - 这是一个非常非常糟糕的主意。