2

我正在尝试使用散点图在 R 中绘制一些数据。这是我用于绘图的代码

data <- read.table(filename, header=FALSE);
colnames(data) <- c("xlabel", "ylabel", "xvalue", "yvalue", "class");   
df <- data.frame(data["xlabel"], data["ylabel"],data["xvalue"], data["yvalue"], data["class"]);
with(df, plot(xvalue, yvalue,       
    pch=c(16,17)[class],
    col=c("red", "blue", "green")[class],
    main="Tittle",
))

#label the nodes    
with(df, text(xvalue+300, yvalue, cex=0.5, sprintf("(%s, %s)", xlabel, ylabel)));

然而,当 2 个节点彼此靠近,或者更糟糕的是重叠时,如这里所示,很难区分节点及其标签。所以我的问题是:1.如何设置节点的笔触和填充颜色以区分重叠节点?2.有没有办法让节点标签表现得更聪明,比如在重叠的情况下调整它们的位置?也许,有一些可用的库允许该选项?

如果你想测试它,这里是数据:

2 6 6990 4721 1 
2 7 6990 4643 2 
1 4 13653 3294 2 
3 7 4070 4643 1 
2 8 6990 6354 1 
3 8 4070 6354 1 
1 2 13653 6990 1 
1 7 13653 4643 2 
3 5 4070 3349 2 
1 8 13653 6354 1 
3 6 4070 4721 1 
2 4 6990 3294 2 
1 5 13653 3349 2 
1 6 13653 4721 1 
3 4 4070 3294 2 
2 5 6990 3349 2 
5 8 3349 6354 1 

谢谢,

4

1 回答 1

1

一个简单的解决方法是在左侧和右侧交替放置标签。我已按 x 值然后 y 值对数据集进行排序,因此附近的点在数据集中很近。

library(plyr)
df <- arrange(df, xvalue, yvalue)
offset <- rep(c(-300, 300), length.out = nrow(df))

with(df, plot(xvalue, yvalue,       #as before
    pch=c(16,17)[class],
    col=c("red", "blue", "green")[class],
    main="Tittle",
))

with(df, text(xvalue + offset, yvalue, cex=0.5, sprintf("(%s, %s)", xlabel, ylabel)))

如果您使用 lattice 或 ggplot(而不是基本图形),则该directlabels包具有direct.label自动定位标签的功能。

于 2013-10-23T07:57:42.117 回答