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

标签 r ggplot2

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

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

enter image description here

审美 group控制哪些点应该由一条线连接。自专栏grpnew_data总是将第一行的重复与其他每一行配对,对应于第一行的点连接到其他每个点。

如果省略 group = grp ,绘制一条穿过所有点的单线图。

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

相关文章:

R - xyplot(格子);多重响应(Y 轴)- 如何识别各个点?

r - 将 case_when 和 between 与对应阈值表一起使用

r - 在 x,y 散点图中使用直接标签

r - 在ggplot中使用闪避获取boxplot的x位置

r - 使用小时更改 bin 大小 :Minute In ggplot histogram

java - 在 GraalVM 中安装 R 包的问题

r - 如何根据一组不等式约束对 data.table 进行排序?

r - 乘以 R 中列表的组合

r - 更改gganimate框架标题的标签

r - 如何更改 ggplot 中小平面上 strip 的大小?