R 绘制连接点集的线段

R 绘制连接点集的线段,r,ggplot2,line,facet,segment,R,Ggplot2,Line,Facet,Segment,我试着在x的每一层,在每一个方面,连接两个点的集合。以下是一个可复制的示例: datum <- structure(list(frequency = c(8L, 7L, 6L, 18L, 5L, 11L, 16L, 15L, 9L, 8L, 8L, 10L, 2L, 20L, 14L, 3L, 6L, 2L, 2L, 11L, 10L, 6L, 15L, 19L, 18L, 18L, 8L, 2L, 10L, 15L, 12L, 17L, 1L, 18L, 7L, 8L, 16L,

我试着在x的每一层,在每一个方面,连接两个点的集合。以下是一个可复制的示例:

datum <- structure(list(frequency = c(8L, 7L, 6L, 18L, 5L, 11L, 16L, 15L, 
9L, 8L, 8L, 10L, 2L, 20L, 14L, 3L, 6L, 2L, 2L, 11L, 10L, 6L, 
15L, 19L, 18L, 18L, 8L, 2L, 10L, 15L, 12L, 17L, 1L, 18L, 7L, 
8L, 16L, 4L, 9L, 2L, 7L, 3L, 16L, 7L, 18L, 20L, 9L, 10L, 13L, 
2L, 15L, 7L, 3L, 20L, 4L, 15L, 5L, 7L, 9L, 16L, 5L, 8L, 10L, 
10L, 7L, 10L, 10L, 17L, 7L, 8L, 13L, 13L, 16L, 5L, 20L, 18L, 
13L, 19L, 3L, 8L, 14L, 12L, 20L, 2L, 9L, 13L, 7L, 2L, 5L, 5L, 
13L, 9L, 13L, 7L, 9L, 4L, 4L, 20L, 1L, 4L), band = structure(c(2L, 
4L, 2L, 3L, 2L, 1L, 4L, 1L, 2L, 1L, 3L, 4L, 2L, 4L, 3L, 4L, 3L, 
2L, 3L, 2L, 2L, 4L, 2L, 1L, 1L, 2L, 1L, 4L, 4L, 1L, 4L, 4L, 2L, 
1L, 4L, 4L, 3L, 4L, 1L, 1L, 3L, 4L, 1L, 3L, 4L, 1L, 2L, 1L, 1L, 
2L, 2L, 1L, 3L, 4L, 2L, 1L, 2L, 4L, 2L, 2L, 4L, 4L, 2L, 4L, 4L, 
1L, 1L, 4L, 2L, 3L, 4L, 1L, 2L, 4L, 1L, 2L, 4L, 1L, 1L, 3L, 4L, 
4L, 2L, 2L, 2L, 1L, 3L, 2L, 2L, 2L, 3L, 3L, 1L, 3L, 4L, 3L, 3L, 
1L, 3L, 4L), .Label = c("1", "2", "3", "4"), class = "factor"), 
test = structure(c(1L, 2L, 1L, 2L, 1L, 2L, 1L, 1L, 1L, 2L, 
2L, 2L, 2L, 2L, 1L, 1L, 2L, 2L, 2L, 2L, 2L, 1L, 2L, 2L, 1L, 
2L, 1L, 2L, 2L, 2L, 2L, 1L, 2L, 2L, 1L, 1L, 1L, 2L, 2L, 2L, 
2L, 2L, 1L, 1L, 1L, 2L, 1L, 1L, 2L, 2L, 1L, 1L, 1L, 1L, 2L, 
1L, 2L, 1L, 1L, 2L, 2L, 2L, 2L, 1L, 1L, 1L, 1L, 2L, 2L, 1L, 
2L, 2L, 2L, 1L, 2L, 1L, 1L, 1L, 2L, 1L, 2L, 2L, 2L, 2L, 2L, 
2L, 1L, 1L, 2L, 2L, 1L, 2L, 1L, 2L, 2L, 2L, 1L, 2L, 1L, 2L
), .Label = c("1", "2"), class = "factor"), knowledge = structure(c(2L, 
3L, 1L, 3L, 1L, 1L, 3L, 3L, 1L, 3L, 1L, 3L, 2L, 2L, 1L, 1L, 
1L, 1L, 3L, 3L, 1L, 2L, 3L, 1L, 1L, 2L, 2L, 1L, 1L, 3L, 2L, 
3L, 1L, 2L, 2L, 1L, 1L, 2L, 2L, 1L, 3L, 3L, 1L, 1L, 2L, 3L, 
3L, 2L, 2L, 3L, 1L, 1L, 2L, 2L, 2L, 3L, 1L, 3L, 1L, 1L, 2L, 
1L, 1L, 2L, 3L, 1L, 1L, 1L, 1L, 3L, 2L, 2L, 1L, 2L, 3L, 2L, 
1L, 2L, 3L, 3L, 2L, 1L, 3L, 1L, 3L, 2L, 1L, 3L, 2L, 2L, 3L, 
1L, 1L, 2L, 1L, 2L, 3L, 1L, 3L, 1L), .Label = c("1", "2", 
"3"), class = "factor")), .Names = c("frequency", "band", 
"test", "knowledge"), row.names = c(NA, -100L), class = "data.frame")
查看图中最左侧的面(“1”),我希望在“无”列中有一条线连接前测到后测,在“格式”列中有一条线连接前测到后测,在“含义”列中有一条线连接前测到后测。我希望在每个方面都这样做


我希望这是有道理的,谢谢

我发现过分依赖ggplot进行数据操作/汇总可能弊大于利。我不知道如何将位置闪避点与直线连接起来。相反,我会这样做:

library(dplyr)
datsum = datum %>%
  group_by(band, knowledge, test) %>%
  summarize(mean = mean(frequency)) %>%
  ungroup %>%
  mutate(knowledge_fac = factor(knowledge, labels = c('none', 'form', 'meaning')))

ggplot(datsum, aes(x = test, y = mean)) +
  geom_path(aes(group = band:knowledge)) +
  geom_point(aes(color = factor(test))) +
  facet_grid(band ~ knowledge_fac) +
  labs(y='number of words (max = 20)', x='self-report knowledge')

借用Gregor在munging数据方面的工作,我认为这符合要求。mutate()区块将测试创建为数字偏移量,测试1为-0.1,测试2为0.1。然后将其添加到知识的数值中。结果是传递给ggplot2的数字x。Gregor正确地定义了这些组,因此其余的都很简单

library(dplyr)
datsum <-  datum %>%
  group_by(band, knowledge, test) %>%
  summarize(mean = mean(frequency)) %>%
  mutate(Test = 0.1 * (2 * (test == 2) - 1),
         Knowledge = as.numeric(knowledge) + Test) %>%
  ungroup 

ggplot(datsum, aes(x = Knowledge, y = mean, color = test)) +
  geom_path(aes(group = band:knowledge), color = "black") +
  geom_point(size = 3) +
  facet_wrap(~ band, nrow = 1) +
  labs(y='number of words (max = 20)', x='self-report knowledge') +
  scale_color_manual(values = c("orange", "blue")) +
  scale_x_continuous(limits = c(0.5, 3.5), breaks = 1:3, 
                     labels = c("none", "form", "meaning"))
库(dplyr)
datsum%
组别(组别、知识、考试)%>%
汇总(平均值=平均值(频率))%>%
变异(测试=0.1*(2*(测试=2)-1),
知识=数字(知识)+测试%>%
解组
ggplot(数据和,aes(x=知识,y=平均值,颜色=测试))+
几何路径(aes(组=波段:知识),颜色=“黑色”)+
几何点(尺寸=3)+
端面缠绕(~band,nrow=1)+
实验室(y=”字数(最大值=20)”,x=”自我报告知识“)+
比例\颜色\手册(值=c(“橙色”、“蓝色”))+
比例x连续(极限=c(0.5,3.5),断裂=1:3,
标签=c(“无”、“形式”、“意义”))

非常感谢您的帮助。我想我不应该像以前那样依赖ggplot,所以谢谢你的确认。我会将此标记为已解决,即使用线连接位置闪避点的问题尚未解决。@Tjuggles谢谢。是的,如果你想学习如何做到这一点,你应该问一个问题,这个问题在标题中的什么位置,它对于这个问题来说是最小的(简单的模拟数据,没有刻面或其他复杂问题)。
library(dplyr)
datsum <-  datum %>%
  group_by(band, knowledge, test) %>%
  summarize(mean = mean(frequency)) %>%
  mutate(Test = 0.1 * (2 * (test == 2) - 1),
         Knowledge = as.numeric(knowledge) + Test) %>%
  ungroup 

ggplot(datsum, aes(x = Knowledge, y = mean, color = test)) +
  geom_path(aes(group = band:knowledge), color = "black") +
  geom_point(size = 3) +
  facet_wrap(~ band, nrow = 1) +
  labs(y='number of words (max = 20)', x='self-report knowledge') +
  scale_color_manual(values = c("orange", "blue")) +
  scale_x_continuous(limits = c(0.5, 3.5), breaks = 1:3, 
                     labels = c("none", "form", "meaning"))