geom_line, чтобы соединить только некоторые точки - PullRequest
0 голосов
/ 17 февраля 2019

Данные, с которыми я работаю, доступны здесь или ниже:

Behaviour  Repeatability       UCI       LCI Age stage
Activity       0.1890000 0.2470000 0.1600000  PE     A
Activity       0.5500000 0.7100000 0.3900000  PW     B
Activity       0.5100000 0.6300000 0.4000000   A     D
Activity       0.4100000        NA        NA  A1     D
Activity       0.4229638 0.4561744 0.3854906  CA     D
Activity       0.1812492 0.2111999 0.1522250  CY     C
Aggression     0.2620000 0.3030000 0.1960000  PE     A
Aggression     0.3700000 0.3800000 0.3600000  PW     B
Aggression     0.4400000 0.5600000 0.3300000   A     D
Aggression     0.3740000        NA        NA  A1     D
Aggression     0.3212115 0.3471766 0.2801818  CA     D
Aggression     0.5106432 0.5635857 0.4634950  CY     C

Аналогично другим пользователям ( здесь и здесь ), я пытаюсь построить эти данные так, чтобы линия проходила только через определенные точки (в моем случае, черные точки).Примечание: оранжевые (A в Age столбце) и красные (A1 в Age столбце) точки показывают, как мои результаты сравниваются с другими.

Самое близкое, что я смог получить:

enter image description here

Код для получения этого участка:

pd <- position_dodge(0.3)

ggplot(rep, aes(x = stage, y = Repeatability, shape = Behaviour, colour=Age)) + 
  geom_point(position = position_dodge(width = 0.3), size = 3) + 
  geom_line(aes(group=Behaviour), position = position_dodge(width = 0.3))+
  scale_x_discrete(labels=c("A" = "50-70 days old", "B" = "70-365 days old", "C" = "Yearlings (365 days old)", "D" = "Adults (>365 days old)")) +
  scale_colour_manual(values = c("orange", "red", "black", "black", "black", "black"), name = "Study", breaks=c("A","A1","PE","PW", "CA", "CY")) + 
  guides(colour=FALSE)+ 
  geom_errorbar(aes(ymin=LCI, ymax=UCI), position=pd, width=0.1, size=0.5)+ theme_bw() +
  theme(axis.line = element_line(colour = "black"),
        plot.caption = element_text(hjust = 0, vjust = 2.12),
        panel.grid.major = element_blank(),
        panel.grid.minor = element_blank(),
        panel.border = element_blank(),
        panel.background = element_blank(),
        text = element_text(size = 15)) +
  labs(y = "Repeatability (r) ± 95 % CrI", x = "Life stage")

Есть ли способ, которым я могу geom_line() соединить только черные точки?

Ответы [ 2 ]

0 голосов
/ 17 февраля 2019

Я опубликую решение, которое сработало для меня, на случай, если кто-то еще столкнется с подобной проблемой.

Мне удалось получить желаемый график, переименовав переменные в столбце Age в первую очередь, чтобыизменить их порядок.Меняя CA на A1 и A1 на A2.

Затем, как @IceCreamToucan и @Jon Spring предложили:

my_colors <- 
   tibble(color = c("orange", "black", "red", "black","black", "black"), 
           Age = c("A","A1","A2", "PE","PW", "CY"))

ggplot(rep, 
aes(x = stage, y = Repeatability, shape = Behaviour, colour=Age)) + 
    geom_point(position = position_dodge(width = 0.3), size = 3) + 
    geom_line(aes(group=Behaviour), position = position_dodge(width = 0.3), 
    data = function(x) inner_join(x, my_colors %>% filter(color == 'black')))+  
    scale_x_discrete(labels=c("A" = "50-70 days old", "B" = "70-365 days old", "C" = "Yearlings (365 days old)", "D" = "Adults (>365 days old)"))) + 
    guides(colour=FALSE)+ #removes the legend showing colour
    geom_errorbar(aes(ymin=LCI, ymax=UCI), position=pd, width=0.1, size=0.5)+     
    theme_bw() +
    theme(axis.line = element_line(colour = "black"),
        plot.caption = element_text(hjust = 0, vjust = 2.12),
        panel.grid.major = element_blank(),
        panel.grid.minor = element_blank(),
        panel.border = element_blank(),
        panel.background = element_blank(),
        text = element_text(size = 15)) +
  labs(y = "Repeatability (r) ± 95 % CrI", x = "Life stage")

Чтобы затем получить желаемый график:

enter image description here

0 голосов
/ 17 февраля 2019

, как заметил @IceCreamToucan, вы можете сделать это, отфильтровав, чтобы просто включить.соответствующая возрастная серия.

(Я сталкиваюсь с проблемой, когда выравнивание между точками и линиями не соответствует последнему этапу жизни. Не знаю, как решить.)

library(tidyverse)
ggplot(data = rep, aes(x = stage, y = Repeatability)) +
  geom_point(aes(shape = Behaviour, colour=Age),
             position = position_dodge(width = 0.3), size = 3) +
  geom_line(data = rep %>% filter(Age %in% c("PE", "PW", "CA", "CY")),
            aes(group = Behaviour), 
            position = position_dodge(width = 0.3)) +

  # as in OP....
  scale_x_discrete(labels=c("A" = "50-70 days old", "B" = "70-365 days old", "C" = "Yearlings (365 days old)", "D" = "Adults (>365 days old)")) +
  scale_colour_manual(values = c("orange", "red", "black", "black", "black", "black"), name = "Study", breaks=c("A","A1","PE","PW", "CA", "CY"))  +
  guides(colour=FALSE)+
  # excluded because data missing from question text
  # geom_errorbar(aes(ymin=LCI, ymax=UCI), position=pd, width=0.1, size=0.5)+ 
  theme_bw() +
  theme(axis.line = element_line(colour = "black"),
        plot.caption = element_text(hjust = 0, vjust = 2.12),
        panel.grid.major = element_blank(),
        panel.grid.minor = element_blank(),
        panel.border = element_blank(),
        panel.background = element_blank(),
        text = element_text(size = 15)) +
  labs(y = "Repeatability (r) ± 95 % CrI", x = "Life stage")

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...