2012-02-29 1625 views
20

我是新來的R和想知道如何在散點圖標籤數據點。我嘗試了下面的代碼,但我得到錯誤。如何用R標記散點圖上的點?

x = c(102856,17906,89697,74384,91081,52457,73749,29910,75604,28267,122136, 
     54210,48925,58937,76281,67789,69138,18026,90806,44893) 
y = c(2818, 234, 2728, 2393, 2893, 1015, 1403, 791, 2243, 596, 2468, 1495, 
     1232, 1746, 2410, 1791, 1706, 259, 1982, 836) 

plot(x, y, main="Scatterplot ", xlab="xaxis ", ylab="yaxis ", pch=19) 

names = c("A","C","E","D","G","F","I","H","K","M","L","N","Q","P","S","R", 
      "T","W","V","Y") 

library(calibrate) 
textxy(x, y, labs=names, cx = 0.5, dcol = "black", m = c(0, 0)) 

Error in text.default(X[posXposY], Y[posXposY], labs[posXposY], adj = c(-0.3, : 
plot.new has not been called yet 

我不明白這個錯誤。請幫我

+1

錯誤消息聽起來像是你的情節無法打開任何更多,當你調用'textxy(X,Y,實驗室=名稱,CX = 0.5,dcol = 「黑」,M = C(0,0))'。嘗試在使用標籤之前再次調用您的情節聲明。 – Sophia 2012-02-29 13:39:40

+0

@sophia,感謝您的評論。我試過了。不過還是我得到錯誤 – lara 2012-02-29 15:19:31

+0

只是出於興趣,因爲我不熟悉'calibrate',是有什麼'textxy'做,基本的'貼標點text'工具不呢? – 2012-02-29 20:07:04

回答

12

你能做到這一點在ggplot2

require(ggplot2) 
d <- data.frame(x = c(102856,17906,89697,74384,91081,52457,73749,29910,75604,28267,122136, 54210,48925,58937,76281,67789,69138,18026,90806,44893), y = c(2818, 234, 2728, 2393, 2893, 1015, 1403, 791, 2243, 596, 2468, 1495, 1232, 1746, 2410, 1791, 1706, 259, 1982, 836), names = c("A","C","E","D","G","F","I","H","K","M","L","N","Q","P","S","R","T","W","V","Y")) 
ggplot(d, aes(x,y)) + geom_point() + geom_text(aes(label=names)) 

您可能希望在文本標籤不直接對點,你可以通過在geom_text部分使用hjustvjust參數完成的頂部。

+0

謝謝你的回答。我試過你的代碼。但在獲取得到這個error.Error(X,ENVIR =此,繼承= INH)(這個......): 嘗試應用非功能 – lara 2012-03-01 07:09:28

+0

我不知道是什麼原因造成如此,這可能幫助:嘗試在R中加載庫(ggplot2)時出錯(http:// stackoverflow。COM /問題/ 6066130 /錯誤時,試圖對負載libraryggplot2式-R) – 2012-03-01 14:16:41

6

您的代碼對我的作品有:

> sessionInfo() 
R version 2.14.2 Patched (2012-02-29 r58525) 
Platform: x86_64-unknown-linux-gnu (64-bit) 

locale: 
[1] LC_CTYPE=en_GB.utf8  LC_NUMERIC=C    
[3] LC_TIME=en_GB.utf8  LC_COLLATE=en_GB.utf8  
[5] LC_MONETARY=en_GB.utf8 LC_MESSAGES=en_GB.utf8 
[7] LC_PAPER=C    LC_NAME=C     
[9] LC_ADDRESS=C    LC_TELEPHONE=C   
[11] LC_MEASUREMENT=en_GB.utf8 LC_IDENTIFICATION=C  

attached base packages: 
[1] stats  graphics grDevices utils  datasets methods 
[7] base  

other attached packages: 
[1] calibrate_1.7 mgcv_1.7-13 

loaded via a namespace (and not attached): 
[1] grid_2.14.2 lattice_0.20-0 Matrix_1.0-4 nlme_3.1-103 
[5] tools_2.14.2 

檢查你有校準的跟上時代的R和版本,如果不對其進行更新,然後再試一次。

這將是更自然的使用您的通話遵循以下規則:

> library(calibrate) 
> names = c("A","C","E","D","G","F","I","H","K","M","L","N","Q","P","S","R", 
+   "T","W","V","Y") 
> plot(x, y, main="Scatterplot ", xlab="xaxis ", ylab="yaxis ", pch=19) 
> textxy(x, y, labs=names, cx = 0.5, dcol = "black", m = c(0, 0)) 

它不應該有任何區別,如果由plot()調用生成的圖形窗口仍處於打開狀態。

+0

謝謝你的回答。我更新了R,但仍然收到同樣的錯誤。我正在使用Windows。 – lara 2012-02-29 13:52:46

+0

@lara你是否也更新了軟件包?還是它已經是最新版本? – 2012-02-29 13:54:48

+0

是的,我更新了包。 – lara 2012-02-29 15:09:11

38

您可以輕鬆地通過使用text()功能來創建此。

text(x,y,labels=names) 
3

您不需要校準包。你可以這樣做:

文本(X,Y-50,名)

它確實爲我工作。

+0

爲什麼這個答案是不是已經接受OP的另一種更好呢? – bcesars 2015-03-27 14:07:41

+0

因爲它不需要任何額外的依賴 – fny 2018-01-23 22:16:32

+0

我ALOS這樣有點不是因爲的偏移TheRimalaya的更好的解決方案(雖然偏移您選擇,應根據規模的你圖。-50可能適用於在問題手) – 2018-01-26 19:26:21