我的数据框看起来像这样:
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()
美观group
控制哪些点应该通过线连接.由于列grp
在new_data
送花儿给人对第一行与每一个其他行的的重复,对应于第一行的点被连接到每一个其它点的.
如果省略group = grp
,则绘制一条通过所有点的单线图.