我有一个看起来像这样的数据框:

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()

R:在ggplot中的两点之间画一条线-LMLPHP

美观的group控制应通过线连接的点。由于grp中的new_data列始终将第一行的重复与其他行中的每对配对,因此与第一行相对应的点被连接到其他每个点。

如果省略group = grp,则会绘制一条仅包含一条直线穿过所有点的图。

关于R:在ggplot中的两点之间画一条线,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/34343415/

10-12 17:37