Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/69.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/opencv/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 将标签添加到绘图线而不是点_R_Ggplot2_Dplyr_Label - Fatal编程技术网

R 将标签添加到绘图线而不是点

R 将标签添加到绘图线而不是点,r,ggplot2,dplyr,label,R,Ggplot2,Dplyr,Label,我有一个物种频率的数据框架。我正在绘制随时间变化的丰度图,并想给最常见的物种贴上标签。我有一个包含以下五列的数据框架——日期、种类、频率、地点、治疗。目前,我正在做以下工作: df %>% mutate(majorSpp = ifelse(frequency > 0.4, as.character(species), "")) %>% ggplot(aes(x = date, y = frequency, colour = species, gro

我有一个物种频率的数据框架。我正在绘制随时间变化的丰度图,并想给最常见的物种贴上标签。我有一个包含以下五列的数据框架——日期、种类、频率、地点、治疗。目前,我正在做以下工作:

df %>%
  mutate(majorSpp = ifelse(frequency > 0.4, as.character(species), "")) %>% 
  ggplot(aes(x = date, y = frequency, colour = species, group = species)) +
    geom_line() +
    facet_grid(type ~ treatment)
    geom_label_repel(aes(label=majorSpp))
然而,这种方法意味着,如果一个物种在多个日期的频率大于0.4,则该线将在多个点的每个点上标记,而不是仅标记一次。我需要的是给majorSpp指定一个物种名称,只针对该物种在所有测量日期中频率最高的点。但我不太明白如何将这种逻辑应用到变异函数中

我对其他标签解决方案持开放态度,比如directlabel,如果这在其他软件包中很容易实现的话

编辑:

示例数据:

df <- data.frame(date = c(01-02-2020, 01-02-2020, 04-04-2020, 04-04-2020), 
                 species = c("cat", "dog", "cat", "dog"), 
                 frequency = c(0.1, 0.5, 0.6, 0.5),
                 site = c('a', 'a', 'a', 'a'),
                 treatment = c(1, 1, 1, 1))
df%
变异(majorSpp=ifelse(频率>0.4,如特征(物种),“”)->temp
临时$majorSpp[重复(临时$majorSpp)]%
ggplot。。。
这有两个问题,如果用额外的列来刻面,那么在整个绘图中,每个majorSpp只显示一次,而理想情况下,在频率高于0.4的每个刻面中都会显示一次。其次,也不是很重要,它破坏了良好的管道流动


我在下面附上了一张我使用此部分解决方案生成的绘图的图片:

我不确定这是否有帮助,但如果我理解,您正在寻找类似的东西吗?让我知道这是如何解决您的问题的:

#Data
mdf <- structure(list(date = c(-2021, -2021, -2020, -2020, -2021, -2021, 
-2020, -2020), species = structure(c(1L, 2L, 1L, 2L, 1L, 2L, 
1L, 2L), .Label = c("cat", "dog"), class = "factor"), frequency = c(0.1, 
0.5, 0.6, 0.5, 0, 0, 0, 0), a_bunch_of_other_cols = structure(c(2L, 
3L, 4L, 1L, 2L, 3L, 4L, 1L), .Label = c("a", "x", "y", "z"), class = "factor")), row.names = c(NA, 
-8L), class = "data.frame")

#Code
mdf %>%
  mutate(majorSpp = ifelse(frequency > 0.4, as.character(species), "")) %>% 
  ggplot(aes(x = date, y = frequency, colour = species, group = species)) +
  geom_point() +
  geom_line()+
  geom_label_repel(aes(label=majorSpp),show.legend = F)+
  facet_wrap(~a_bunch_of_other_cols)
#数据
mdf%
变异(majorSpp=ifelse(频率>0.4,如特征(物种),“”))%>%
ggplot(aes(x=日期,y=频率,颜色=物种,组=物种))+
几何点()+
geom_线()+
geom_标签排斥(aes(标签=majorSpp),show.legend=F)+
面包(~一堆其他的)

我丢失的秘方是“组员”。请注意,Summary摆脱了分组,因此需要重新添加它

df %>%
  filter(morphology != "inanimate") %>%
  group_by(type, date, treatment, species) %>%
  summarise(av = mean(presence), morphology = unique(morphology)) %>%
  group_by(treatment, type) %>%
  mutate(majorSpp = ifelse(av > 0.6, as.character(species), "")) %>%
  mutate(majorSpp = ifelse(duplicated(majorSpp), '', majorSpp)) %>%
  ungroup(treatment, type) %>%
  ggplot(aes(x = date, y = av, colour = morphology, group = species)) +
    geom_line() +
    facet_grid(treatment ~ type) +
    geom_label_repel(aes(label=majorSpp), size=2)
制作:


请提供一些数据。阅读张贴指南。为了澄清,您有一个线条图,但您希望每行只有一个标签?如果是这样,您可能需要重新考虑如何定义包含标签信息的变量,使其仅出现一次,即在一个时间点。也许只是第一次约会,还是最后一次约会?在调用GGPrice之前,考虑将这个标签显式添加到您的代码> DF< /COD>数据帧中。不幸的是,我没有提到我正在对数据进行分面处理,这意味着标签将在每个地块上只出现一次,而不是在每个分面上出现一次(前提是频率>0.4)。为了澄清,如果某个物种在任何给定日期的频率>0.4,您希望整个物种都有一个标签,表明其频率>0.4(不是每个发生这种情况的日期都有一个标签)?如果是这样,50个物种中有多少可能满足这一要求?我仍然建议使用图例,或者根据颜色或线型对这些线条进行标记,这些线条映射到图例的同一个单一值,“频率>0.4的物种”或类似的东西。
df %>%
  filter(morphology != "inanimate") %>%
  group_by(type, date, treatment, species) %>%
  summarise(av = mean(presence), morphology = unique(morphology)) %>%
  group_by(treatment, type) %>%
  mutate(majorSpp = ifelse(av > 0.6, as.character(species), "")) %>%
  mutate(majorSpp = ifelse(duplicated(majorSpp), '', majorSpp)) %>%
  ungroup(treatment, type) %>%
  ggplot(aes(x = date, y = av, colour = morphology, group = species)) +
    geom_line() +
    facet_grid(treatment ~ type) +
    geom_label_repel(aes(label=majorSpp), size=2)