2014-09-30 5 views
2

그래프에 범례를 추가하려고합니다. 내가 뭘 잘못하고 있는지 말해 줄 수 있니?그래프에 범례를 추가하고 X 축의 점 이름을 변경합니다.

a <- c('LSF1', 'PWD', 'GWD') 

# open the pdf file 
pdf(file='LSF1_PWD_GWD.pdf') 

rowsToPlot<-c(93,2018,942) 

matplot(as.matrix(t(tbl_alles[rowsToPlot,])),type=rep("l", length(rowsToPlot)), col=rainbow(length(rowsToPlot)),xlab = 'Fraction Size', ylab = 'Intensity', 
     legend('topright', names(a),lty=1, bty='n', cex=.75)) 

# close the pdf file 
dev.off() 

그리고 나오는 오류 :

Error in as.graphicsAnnot(legend) : argument "legend" is missing, with no default

나는 컬럼의 이름을 (1 ~ 25) X 축에 열 수를 변경하지만 유지하고 싶습니다 그것처럼 규모.

colnames(tbl_alles) 
[1] "10"  "33.95" "58.66" "84.42" "110.21" "134.16" "164.69" "199.1" "234.35" 
[10] "257.19" "361.84" "432.74" "506.34" "581.46" "651.71" "732.59" "817.56" "896.24" 
[19] "971.77" "1038.91" 

내 데이터의 그 :

> dput(head(tbl_alles)) 
structure(list(`10` = c(0, 0, 0, 0, 0, 0), `33.95` = c(0, 0, 
0, 0, 0, 0), `58.66` = c(0, 0, 0, 0, 0.328143363, 0.552139556 
), `84.42` = c(0, 0, 0, 0, 1, 1), `110.21` = c(0, 0, 0, 0, 0, 
0.151581882), `134.16` = c(0.190968551, 0, 0, 0, 0, 0.164736594 
), `164.69` = c(0.5342874459, 0, 0.3619993464, 0, 0, 0.1891527151 
), `199.1` = c(0.866134859, 0, 0.405387979, 0, 0, 0.274468991 
), `234.35` = c(1, 0, 0.446118481, 0, 0, 0.338427523), `257.19` = c(0.732231652, 
0, 0.666653103, 0, 0, 0.403078017), `361.84` = c(0.660960044, 
0, 1, 0, 0, 0.202578329), `432.74` = c(0.47961801, 0, 0.48323321, 
0, 0, 0.25926071), `506.34` = c(0, 0, 0, 0, 0, 0), `581.46` = c(0, 
0.52783556, 0, 1, 0, 0), `651.71` = c(0, 0.32678969, 0, 0.36428195, 
0, 0), `732.59` = c(0, 0.229023369, 0, 0.312832425, 0, 0), `817.56` = c(0, 
0.25668583, 0, 0.4003249, 0, 0), `896.24` = c(0, 0.31675535, 
0, 0.50882005, 0, 0), `971.77` = c(0, 0.27811949, 0, 0.48419038, 
0, 0), `1038.91` = c(0, 1, 0, 0.52506752, 0, 0)), .Names = c("10", 
"33.95", "58.66", "84.42", "110.21", "134.16", "164.69", "199.1", 
"234.35", "257.19", "361.84", "432.74", "506.34", "581.46", "651.71", 
"732.59", "817.56", "896.24", "971.77", "1038.91"), row.names = c("at1g01050.1", 
"at1g01080.1", "at1g01090.1", "at1g01320.2", "at1g01470.1", "at1g01800.1" 
), class = "data.frame") 

답변

3

legend(...)에 대한 호출은 하지matplot(...)에 대한 호출에 있어야합니다.

즉 :

matplot(as.matrix(t(tbl_alles[rowsToPlot,])),type=rep("l", length(rowsToPlot)), col=rainbow(length(rowsToPlot)),xlab = 'Fraction Size', ylab = 'Intensity') 

legend('topright', names(a),lty=1, bty='n', cex=.75) 

이 도움이됩니까?


편집 :

그것은 당신의 전설 a의 내용이 밝혀은 (즉, a 이미 이름의 벡터이다 - names(a)를 호출 할 필요가 없습니다). 범례를 표시하기위한 올바른 호출은 다음과 같습니다.

legend('topright', a,lty=1, bty='n', cex=.75) 

그러면 제공된 데이터 세트에서 작동합니다.


2 편집 :이 제공

tbl_alles = structure(list(`10` = c(0, 0, 0, 0, 0, 0), `33.95` = c(0, 0, 
0, 0, 0, 0), `58.66` = c(0, 0, 0, 0, 0.328143363, 0.552139556 
), `84.42` = c(0, 0, 0, 0, 1, 1), `110.21` = c(0, 0, 0, 0, 0, 
0.151581882), `134.16` = c(0.190968551, 0, 0, 0, 0, 0.164736594 
), `164.69` = c(0.5342874459, 0, 0.3619993464, 0, 0, 0.1891527151 
), `199.1` = c(0.866134859, 0, 0.405387979, 0, 0, 0.274468991 
), `234.35` = c(1, 0, 0.446118481, 0, 0, 0.338427523), `257.19` = c(0.732231652, 
0, 0.666653103, 0, 0, 0.403078017), `361.84` = c(0.660960044, 
0, 1, 0, 0, 0.202578329), `432.74` = c(0.47961801, 0, 0.48323321, 
0, 0, 0.25926071), `506.34` = c(0, 0, 0, 0, 0, 0), `581.46` = c(0, 
0.52783556, 0, 1, 0, 0), `651.71` = c(0, 0.32678969, 0, 0.36428195, 
0, 0), `732.59` = c(0, 0.229023369, 0, 0.312832425, 0, 0), `817.56` = c(0, 
0.25668583, 0, 0.4003249, 0, 0), `896.24` = c(0, 0.31675535, 
0, 0.50882005, 0, 0), `971.77` = c(0, 0.27811949, 0, 0.48419038, 
0, 0), `1038.91` = c(0, 1, 0, 0.52506752, 0, 0)), .Names = c("10", 
"33.95", "58.66", "84.42", "110.21", "134.16", "164.69", "199.1", 
"234.35", "257.19", "361.84", "432.74", "506.34", "581.46", "651.71", 
"732.59", "817.56", "896.24", "971.77", "1038.91"), row.names = c("at1g01050.1", 
"at1g01080.1", "at1g01090.1", "at1g01320.2", "at1g01470.1", "at1g01800.1" 
), class = "data.frame") 
a <- c('LSF1', 'PWD', 'GWD') 
rowsToPlot<-c(1:3) 
matplot(as.matrix(t(tbl_alles[rowsToPlot,])),type=rep("l", length(rowsToPlot)), col=rainbow(length(rowsToPlot)),xlab = 'Fraction Size', ylab = 'Intensity') 
legend('topright',a,lty=1, bty='n', cex=.75) 

:

enter image description here

그것은 작동합니다

정말 일반, 여기에 내 컴퓨터에서 작동하는 것입니다 당신을위한 새로운 R 세션에서도 동일 :)

+0

지금 오류가 발생했습니다 :'strwidth의 오류 (범례, 단위 = "사용자", cex = cex, font = text.font) : plot.new가 아직 호출되지 않았습니다' –

+0

이상합니다. 내 R 세션에서 작동합니다. 최소한의 작업 예제를 제공하기 위해 내 대답을 업데이트하겠습니다. 그러면 새롭고 깨끗한 R 세션에서 실행할 수 있으며 작동하는지 확인하십시오. – Jealie

+0

오키 (Okey)는 그것을 알아 내려고 노력할 것이고, 아마 아침에 알게 될 것입니다. 왜냐하면 제가 자러 갈 때가 되었기 때문입니다! 감사! –

관련 문제