我有一个看起来像这样的数据框:
X Y
100 50
80 60
70 90
110 60
30 20
... ...
大约有100条线。 X列和Y列均为数字
当我绘制这些点时,我想在第一个点(100,50)和任何其他点之间画一条线。换句话说,我想要一条线将(100,50)与(80,60)连接起来,一条线将(100,50)与(70,90)连接起来,一条线将(100,50)与(110,110)连接起来,60),但(80,60)和(70,90)之间没有界限。所有行均从第一个点开始。
我没有第三栏。我不能使用组。我想知道是否仍可以在ggplot中绘制此图。
谢谢
最佳答案
这个想法是使用组。为此,您必须添加可用于分组的第三列。实现此目的的一种可能方法如下。
首先,我定义样本数据
df <- read.table(text = "X Y
100 50
80 60
70 90
110 60
30 20", header = TRUE)
然后,我创建一个新的数据框,其中对其他每一行都重复第一行。添加了
grp
列,该列将第一行的每个重复链接到其他行之一:n <- nrow(df) - 1
new_data <- data.frame(X = c(rep(df$X[1], n), df$X[-1]),
Y = c(rep(df$Y[1], n), df$Y[-1]))
new_data$grp <- as.factor(rep(1:n, times = 2))
new_data
## X Y grp
## 1 100 50 1
## 2 100 50 2
## 3 100 50 3
## 4 100 50 4
## 5 80 60 1
## 6 70 90 2
## 7 110 60 3
## 8 30 20 4
现在,可以使用ggplot直接创建图:
library(ggplot2)
ggplot(new_data, aes(X, Y, group = grp)) +
geom_point() + geom_line()
美观的
group
控制应通过线连接的点。由于grp
中的new_data
列始终将第一行的重复与其他行中的每对配对,因此与第一行相对应的点被连接到其他每个点。如果省略
group = grp
,则会绘制一条仅包含一条直线穿过所有点的图。关于R:在ggplot中的两点之间画一条线,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/34343415/