2014-11-16 43 views
0

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

聽起來像是給我的一個HW分配。期望提出這些問題的人將呈現使用代碼構建的特定數據對象,並展示他們自己在編碼方面的努力。然後我們就如何克服障礙提供建議。 –

+0

@BondedDust:我添加了一個嘗試的解決方案。 –

+1

嘗試:'matplot(df,type =「b」)'來解決你的第一個問題,我會在第二個時候使用lattice :: xyplot。後者有很多有效的解決方案。 –

回答

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值是該行的名字 - 一個非常,非常糟糕的主意。

+0

謝謝。這看起來非常好。然而,當用性能較差的序列(例如c(1,3,7,8,16,19,20,24,28,30))替代1:10時,刻度線仍然是1:10。我如何強制將刻度線標記爲上面列出的列表中的數字? –

相關問題