ggplot线段从一个点到多个来自不同的数据帧
ggplot line segments from one point to many from different dataframes
我有一个 df 有两个组的起点,另一个有相同组的终点。我想制作一个 ggplot 绘图线,从第 1 组开始到所有满足条件的第 1 组结束,从第 2 组开始到所有满足条件的第 2 组结束,但我不知道我需要什么 geom_用于实现这一点,如果我可以像我尝试的那样从两个不同的数据帧中做到这一点。
# start coordinates:
set.seed(5)
start <- data.frame(matrix(nrow=2,ncol=3))
colnames(start) <- c("group","X","Y")
start$group <- c(1,2)
start$X <- c(5,10)
start$Y <- c(5,10)
# end coordinates:
df <- data.frame(matrix(nrow = 20,ncol=4))
colnames(df) <- c("group","X","Y","condition")
df$group <- rep(c(1,2),each=10)
df$X <- runif(20,0,20)
df$Y <- runif(20,0,20)
df$condition <- c("n","n","n","y","n",
"y","n","n","y","y",
"y","n","n","y","n",
"y","y","y","n","y")
# plot data
library(ggplot2)
ggplot(data=df,aes(x=X,y=Y,color=group))+
geom_point(aes(shape=condition))+
geom_point(data=start,aes(x=X,y=Y),size=2)
我想要的是每组都从起点到 "condition=yes" 终点的线。该图看起来有点像两颗重叠的星星,但我不知道如何在一个 geom_ 命令中从两个数据帧调用。到目前为止,这是我尝试过的。
ggplot(data=df,aes(x=X,y=Y,color=group))+
geom_point(aes(shape=condition))+
geom_point(data=start,aes(x=X,y=Y),size=2)+
geom_segment(aes(x=start$X,
y=start$Y,
xend=df$X[df$condition=="y"],
yend=df$Y[df$condition=="y"],
group=group))
但这没有用。不确定 geom_segment 是否是我应该使用的。
library(dplyr); library(ggplot2)
start %>%
left_join(df[df$condition=="y",], by = "group") %>%
ggplot(aes(x = X.x, y = Y.x,
xend = X.y, yend = Y.y, group = group)) +
geom_segment() +
geom_point() +
geom_point(data = df, aes(x = X, y = Y, shape = condition), inherit.aes = F)
merged.data <- merge(x=start, y=df, by="group")
colnames(merged.data) <- c("group", "X.start", "Y.start", "X.end", "Y.end", "condition")
ggplot(df, aes(x=X, y=Y, color=as.character(group))) +
geom_point(size=2) +
geom_point(data=start, aes(x=X, y=Y, color=as.character(group)), size=2) +
geom_segment(data=merged.data[merged.data$condition == "y", ], aes(x=X.start, y=Y.start, xend=X.end, yend=Y.end, color=as.character(group)))
我有一个 df 有两个组的起点,另一个有相同组的终点。我想制作一个 ggplot 绘图线,从第 1 组开始到所有满足条件的第 1 组结束,从第 2 组开始到所有满足条件的第 2 组结束,但我不知道我需要什么 geom_用于实现这一点,如果我可以像我尝试的那样从两个不同的数据帧中做到这一点。
# start coordinates:
set.seed(5)
start <- data.frame(matrix(nrow=2,ncol=3))
colnames(start) <- c("group","X","Y")
start$group <- c(1,2)
start$X <- c(5,10)
start$Y <- c(5,10)
# end coordinates:
df <- data.frame(matrix(nrow = 20,ncol=4))
colnames(df) <- c("group","X","Y","condition")
df$group <- rep(c(1,2),each=10)
df$X <- runif(20,0,20)
df$Y <- runif(20,0,20)
df$condition <- c("n","n","n","y","n",
"y","n","n","y","y",
"y","n","n","y","n",
"y","y","y","n","y")
# plot data
library(ggplot2)
ggplot(data=df,aes(x=X,y=Y,color=group))+
geom_point(aes(shape=condition))+
geom_point(data=start,aes(x=X,y=Y),size=2)
我想要的是每组都从起点到 "condition=yes" 终点的线。该图看起来有点像两颗重叠的星星,但我不知道如何在一个 geom_ 命令中从两个数据帧调用。到目前为止,这是我尝试过的。
ggplot(data=df,aes(x=X,y=Y,color=group))+
geom_point(aes(shape=condition))+
geom_point(data=start,aes(x=X,y=Y),size=2)+
geom_segment(aes(x=start$X,
y=start$Y,
xend=df$X[df$condition=="y"],
yend=df$Y[df$condition=="y"],
group=group))
但这没有用。不确定 geom_segment 是否是我应该使用的。
library(dplyr); library(ggplot2)
start %>%
left_join(df[df$condition=="y",], by = "group") %>%
ggplot(aes(x = X.x, y = Y.x,
xend = X.y, yend = Y.y, group = group)) +
geom_segment() +
geom_point() +
geom_point(data = df, aes(x = X, y = Y, shape = condition), inherit.aes = F)
merged.data <- merge(x=start, y=df, by="group")
colnames(merged.data) <- c("group", "X.start", "Y.start", "X.end", "Y.end", "condition")
ggplot(df, aes(x=X, y=Y, color=as.character(group))) +
geom_point(size=2) +
geom_point(data=start, aes(x=X, y=Y, color=as.character(group)), size=2) +
geom_segment(data=merged.data[merged.data$condition == "y", ], aes(x=X.start, y=Y.start, xend=X.end, yend=Y.end, color=as.character(group)))