2012-02-29 1623 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