我有一个数据集,它提出了一些转换挑战,为创建哑铃图做准备:

  1. 单一日期组:有些组只有一个日期.在这些情况下,开始日期和结束日期相同,h_sequ1.
  2. 两个日期组:其他组有明确的开始和结束日期,由12h_sequ值表示.这方面的一个例子是第12组.
  3. 三个日期组:还有具有三个日期的组,其中h_sequ采用值1、2和3,例如组33.
  4. 在组33中,也有一个独特的情况,其中h_sequ的值为1, 1, 2, 3.
 group h_sequ date      
   <int>  <int> <date>    
 1     1      1 2012-03-27
 2     1      1 2012-03-27
 3    10      1 2016-10-25
 4    10      1 2016-10-25
 5    12      1 2021-06-25
 6    12      2 2022-05-18
 7    31      1 2019-11-28
 8    31      1 2019-11-28
 9    31      2 2021-03-24
10    33      1 2013-09-03
11    33      1 2013-09-03
12    33      2 2019-01-04
13    33      3 2020-07-28
14    35      1 2015-10-21
15    35      2 2017-06-28

data <- structure(list(group = c(1L, 1L, 10L, 10L, 12L, 12L, 31L, 31L, 
31L, 33L, 33L, 33L, 33L, 35L, 35L), h_sequ = c(1L, 1L, 1L, 1L, 
1L, 2L, 1L, 1L, 2L, 1L, 1L, 2L, 3L, 1L, 2L), date = structure(c(15426, 
15426, 17099, 17099, 18803, 19130, 18228, 18228, 18710, 15951, 
15951, 17900, 18471, 16729, 17345), class = "Date")), class = c("tbl_df", 
"tbl", "data.frame"), row.names = c(NA, -15L))

主要问题是如何实现Date列的逻辑,以适应组合哑铃图中的这些场景.到目前为止,我已经使用汇总来获得每个组的最小和最大日期,但我需要将这种方法与我的数据的特定 struct 集成在一起,考虑到每个组的日期数量不同.

到目前为止,我有这样的 idea :

library(ggplot2)
library(ggalt)
library(dplyr)

data %>%
  summarise(start_date = min(date), end_date = max(date), .by = group) %>%
  ggplot(aes(x = start_date, xend = end_date, y = group)) +
  geom_dumbbell(color = "red3", size = 3)

enter image description here

推荐答案

我可能会手动避开共现点,并加入geom_path点.这允许完整地显示您的所有数据.

library(tidyverse)

data %>% 
  mutate(group = factor(group)) %>%
  mutate(dodge = (row_number() - median(row_number()))/n()/3.2, 
                  .by = c(group, date)) %>%
  ggplot(aes(date, group)) +
  geom_path(linewidth = 3, color = "gray") +
  geom_point(aes(y = as.numeric(group) + dodge, fill = factor(h_sequ)), 
             shape = 21, size = 5) +
  scale_fill_manual("h_sequ", values = c("orange", "deepskyblue4", "red4")) +
  theme_minimal(base_size = 16) 

enter image description here

R相关问答推荐

跨列应用多个摘要函数:summerise_all:列表对象无法强制为double类型'

查找满足SpatRaster中条件的单元格位置

提取R中值和列名的所有可能组合

如何使用shinyChatR包配置聊天机器人

如何 bootstrap glm回归、估计95%置信区间并绘制它?

R根据条件进行累积更改

在R中无法读入具有Readxl和lApply的数据集

以更少间隔的较小表中的聚合离散频率表

在保留列表元素属性的同时替换列表元素

调换行/列并将第一行(原始数据帧的第一列)提升为标题的Tidyr类似功能?

我如何go 掉盒子图底部的数字?

减go R中列表的所有唯一元素对

错误包arrowR:READ_PARQUET/OPEN_DATASET&QOT;无法反序列化SARIFT:TProtocolException:超出大小限制&Quot;

删除在R中的write.table()函数期间创建的附加行

如何构建一个for循环来循环处理动物ID?

名字的模糊匹配

条形图中的条形图没有try 赋予它们的 colored颜色

将某个阈值以下的列中的值分类到不同的列中,否则保持该列的原样

在分面的ggplot2条形图中对条形图进行排序,并省略每组未使用的系数级别

GgHighlight找不到它创建的列:`Highlight..1`->;`Highlight.....`