如何用R标记散点图上的点?
Posted
技术标签:
【中文标题】如何用R标记散点图上的点?【英文标题】:How to label points on a scatterplot with R? 【发布时间】:2012-03-18 23:52:24 【问题描述】:我是 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
我不明白这个错误。请帮帮我
【问题讨论】:
当您调用textxy(x, y, labs=names, cx = 0.5, dcol = "black", m = c(0, 0))
时,错误消息听起来好像您的绘图不再打开。尝试在使用标签之前再次调用你的情节语句。
@sophia,感谢您的评论。我试过了。但我仍然收到错误
只是出于兴趣,因为我不熟悉calibrate
,有什么textxy
是基本的text
标记点工具没有的吗?
@lara 你是在调用 textxy 之前关闭剧情吗?不要不要关闭绘图窗口,因为这会给出您在尝试任何注释功能时所遇到的错误。
【参考方案1】:
您的代码适用于我:
> 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 和 calibrate 版本,如果没有,请更新并重试。
使用以下调用顺序会更自然:
> 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()
调用生成的绘图窗口是否仍然打开应该没有任何区别。
【讨论】:
感谢您的回答。我更新了 R 但我仍然遇到同样的错误。我正在使用 Windows。 @lara 你也更新了包吗?还是已经是最新版本了? 那我难住了;您的代码使用您的乱序代码和我在答案中编辑的更有序的版本对我有用。现在是时候在一个干净的 R 会话中尝试这个了,如果问题仍然存在,请联系包的维护者寻求帮助。 @lara 我也是 Windows 用户,你的代码对我有用。【参考方案2】:你可以在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
部分中使用 hjust
或 vjust
参数来实现。
【讨论】:
感谢您的回答。我试过你的代码。但是得到这个错误。get(x, envir = this, inherits = inh)(this, ...) 中的错误:尝试应用非函数 我不确定是什么原因造成的,但这可能会有所帮助:Error when trying to load library(ggplot2) in R【参考方案3】:您可以使用text()
函数轻松创建它。
text(x,y,labels=names)
【讨论】:
【参考方案4】:您不需要校准包。你可以这样做:
文本(x,y-50,名称)
它确实对我有用。
【讨论】:
为什么这个答案比 OP 接受的其他答案更好? 因为它不需要任何额外的依赖 我也喜欢这个比 TheRimalaya 的解决方案好一点,因为偏移量(尽管您选择的偏移量应该基于图表的比例。-50 可能适用于手头的问题)以上是关于如何用R标记散点图上的点?的主要内容,如果未能解决你的问题,请参考以下文章