在R中使用ggplot2创建两个变量的有向箭头图

一个小男孩

在两个时间点((V1,V2)对同一主题(id测量了两个变量timepoint我想要一个带有箭头路径的散点图,以显示同一主题的值如何从T1移到T2

在我的示例中,某些主题的inV1in都没有变化,V2理想的情况是为这些子项显示一个点(例如sub 1),但是我可以在两次访问中显示两个点,因为它们会重叠。V1减少的V2子项(例如,子项2),这些子项显示在上方的红色箭头中。第三组主题显示V1V2 (子6和7)增加:这些子为绿色

但是,我真正需要的是所有箭头从T1指向T2那就是我希望绿色箭头改变方向。

可以通过以下方式生成数据集:

datatest <- data.frame(timepoint =rep(seq(2,1),8), 
                   id = c(1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8),
                   V1= c( 30.29, 30.29, 21.60, 31.43, 20.75,20.75, 21.60, 30.03, 21.60, 31.30, 31.60, 21.72, 31.6, 20.02, 11.60, 20.16),
                   V2=c(40, 40, 30.78, 41.63, 40.41, 40.41,30.78, 40.97, 20.78, 40.84, 41.85, 41.85, 40.78, 31.79,20.78, 30.23))

看起来像这样:

   timepoint id    V1    V2
1          2  1 30.29 40.00
2          1  1 30.29 40.00
3          2  2 21.60 30.78
4          1  2 31.43 41.63
5          2  3 20.75 40.41
6          1  3 20.75 40.41
7          2  4 21.60 30.78
8          1  4 30.03 40.97
9          2  5 21.60 20.78
10         1  5 31.30 40.84
11         2  6 31.60 41.85
12         1  6 21.72 41.85
13         2  7 31.60 40.78
14         1  7 20.02 31.79
15         2  8 11.60 20.78
16         1  8 20.16 30.23

要生成我当前拥有的(错误的)图,请运行以下代码:

library(ggplot2)
library(lemon)
ggplot(datatest, aes(V1,V2,color=as.factor(timepoint),group=id)) +ggtitle("V2 vs V1 from T1 to T2")+
  geom_pointline(linesize=1, size=2, distance=4, arrow = arrow(angle = 30, length = unit(0.1, "inches"), ends = "first", type = "open") )+
  scale_x_continuous(limits = c(0,33), breaks=seq(0,30,10), expand = c(0, 0)) +
  scale_y_continuous(limits = c(0,43), breaks=seq(0,44,10),expand = c(0, 0))+
  scale_color_manual(values=c("green","red"))+labs(color  = "Timepoint")

该图当前如下所示: 在此处输入图片说明

谢谢!

保罗·范·奥本

这会让您更近吗?

library(dplyr)
library(tidyr)
library(ggplot2)


data <- data.frame(timepoint =rep(seq(2,1),8), 
                       id = c(1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8),
                       V1= c( 30.29, 30.29, 21.60, 31.43, 20.75,20.75, 21.60, 30.03, 21.60, 31.30, 31.60, 21.72, 31.6, 20.02, 11.60, 20.16),
                       V2=c(40, 40, 30.78, 41.63, 40.41, 40.41,30.78, 40.97, 20.78, 40.84, 41.85, 41.85, 40.78, 31.79,20.78, 30.23))


data <- data %>%
  mutate(row_id = paste0("T", timepoint)) %>%
  pivot_wider(id_cols = id,
              names_from = row_id,
              values_from = c(V1, V2)) %>%
  mutate(colour = ifelse((V1_T1 > V1_T2) | (V2_T1 > V2_T2), "red", "green"))

ggplot(data = data) +
  geom_point(aes(x = V1_T1, y = V2_T1)) +
  geom_point(aes(x = V1_T2, y = V2_T2)) +
  geom_segment(aes(x = V1_T1, xend = V1_T2, y = V2_T1 , yend = V2_T2, colour = colour),
               arrow = arrow(length = unit(0.3,"cm"))) +
  scale_x_continuous(
    limits = c(0, 33),
    breaks = seq(0, 30, 10),
    expand = c(0, 0)
  ) +
  scale_y_continuous(
    limits = c(0, 43),
    breaks = seq(0, 44, 10),
    expand = c(0, 0)
  ) 

您可以过滤对象data以删除那些V1和V2不变且不绘制长度为零的线的线。

在此处输入图片说明

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

在R中使用ggplot2覆盖两个图

ggplot2:具有两个变量的多层图的facet_wrap失败

ggplot2条形图,带有两个分类变量

使用ggplot2在一组内彼此相关的两个变量的图

通过使用 ggplot2 连接两个点在 R 中绘制多个图

ggplot2:覆盖两个图并使用两个图例

如何在 R 中使用 ggplot2 为数据提供两个注释

Ggplot2中带有两个变量的两个直方图

在两个图之间的ggplot2中,使所有图组件的大小相同

在 ggplot 2 中使用两个变量循环

在ggplot2中使用双Y轴在同一图上将两个变量绘制为线

创建两个镜像密度曲线的ggplot2图,中间有一条线图(或:在R中重新创建“漂移扩散模型”图)

RStudio ggplot2 两个图

对具有两个级别ggplot2的堆叠条形图进行重新排序

ggplot2 / R中每个x值组合两个箱形图的困难

在R中使用ggplot2向图添加标签

如何从ggplot2中的两个分类变量创建x轴标签?

使用ggplot2在一张图中绘制两个单独的条形图

使用 ggplot2 绘制两个时间序列的简单图

如何在 R 中使用 ggplot2 创建带有数据标签的非堆叠条形图?

在R中使用ggplot的条形图,并填充两个数字变量

使用 R 中的 ggplot2 控制双 geom_ribbon 上两个变量的颜色

ggplot条形图并排使用两个变量

在ggplot2中按两个变量分组

如何在散点图qplot或ggplot2中具有两个变量?

ggplot2 中带有两个分类变量的散点图

使用ggplot2为R中的离散变量创建小提琴图,飞船图或类似图

在标题中使用两个日期变量的文本的 R ggplot 变量

使用每个变量的最大值创建ggplot2图的R函数是什么?