Я наблюдаю странное поведение в r, пытаясь использовать ggplot.

Я не могу воссоздать проблему с образцом набора данных, так как не могу понять, в чем проблема с набором данных, который я использую. По сути, у меня есть две переменные из одного набора данных, и aes применяется к одной, но не к другой.

Это фрейм данных: temp

temp
# A tibble: 504 x 5
# Groups:   continent [6]
   continent  year urban.pop predicted.estimated.pop       pop
   <chr>     <int>     <dbl> <chr>                       <dbl>
 1 Africa     1950  32658962 estimated.pop            32658962
 2 Africa     1955  41419217 estimated.pop            41419217
 3 Africa     1960  53008425 estimated.pop            53008425
 4 Africa     1965  66348577 estimated.pop            66348577
 5 Africa     1970  82637370 estimated.pop            82637370
 6 Africa     1975 103198989 estimated.pop           103198989
 7 Africa     1980 128615954 estimated.pop           128615954
 8 Africa     1985 160721947 estimated.pop           160721947
 9 Africa     1990 200111296 estimated.pop           200111296
10 Africa     1995 241824184 estimated.pop           241824184

Я хочу построить этот фрейм данных, чтобы он выглядел следующим образом:

ggplot(temp, aes(x = year, y = pop, col = continent, linetype = predicted.estimated.pop)) +
  geom_line()

enter image description here

Это выглядит правильно, но когда я меняю ось Y на график urban.pop, я получаю следующее, где тип линии aes не был применен:

ggplot(temp, aes(x = year, y = urban.pop, col = continent, linetype = predicted.estimated.pop)) +
  geom_line()

enter image description here

Как видно выше, и pop, и urban.pop являются class: dbl. Они тоже идентичны:

sum(temp$pop - temp$urban.pop, na.rm = T)
[1] 0

Единственное, что я могу отметить, это то, что temp - это сгруппированный df:

str(temp)
Classes ‘grouped_df’, ‘tbl_df’, ‘tbl’ and 'data.frame': 504 obs. of  5 variables:
 $ continent              : chr  "Africa" "Africa" "Africa" "Africa" ...
 $ year                   : int  1950 1955 1960 1965 1970 1975 1980 1985 1990 1995 ...
 $ urban.pop              : num  32658962 41419217 53008425 66348577 82637370 ...
 $ predicted.estimated.pop: chr  "estimated.pop" "estimated.pop" "estimated.pop" "estimated.pop" ...
 $ pop                    : num  32658962 41419217 53008425 66348577 82637370 ...
 - attr(*, "vars")= chr "continent"
 - attr(*, "drop")= logi TRUE
 - attr(*, "indices")=List of 6
  ..$ : int  0 1 2 3 4 5 6 7 8 9 ...
  ..$ : int  21 22 23 24 25 26 27 28 29 30 ...
  ..$ : int  42 43 44 45 46 47 48 49 50 51 ...
  ..$ : int  63 64 65 66 67 68 69 70 71 72 ...
  ..$ : int  84 85 86 87 88 89 90 91 92 93 ...
  ..$ : int  105 106 107 108 109 110 111 112 113 114 ...
 - attr(*, "group_sizes")= int  84 84 84 84 84 84
 - attr(*, "biggest_group_size")= int 84
 - attr(*, "labels")='data.frame':  6 obs. of  1 variable:
  ..$ continent: chr  "Africa" "Asia" "Europe" "LAC" ...
  ..- attr(*, "vars")= chr "continent"
  ..- attr(*, "drop")= logi TRUE

Я не могу понять, почему эти две переменные приводят к разным результатам для типов линий aes. Причина, по которой мне нужно это исправить, заключается в том, что у меня есть еще одна переменная в исходном наборе данных, которая ведет себя так же, как urban.pop.

Может ли кто-нибудь объяснить мне это или помочь решить проблему?

0
MorrisseyJ 20 Ноя 2018 в 22:45

1 ответ

Лучший ответ

Я не могу воспроизвести вашу проблему, но я добавил пример данных, аналогичный вашему. Может быть, сравнивая, вы найдете узел.

library(ggplot2)
p1 <- ggplot(temp, aes(x=year, y=pop, col=continent, 
                       linetype=predicted.estimated.pop)) +
  geom_line()
p2 <- ggplot(temp, aes(x=year, y=urban.pop, col=continent, 
                       linetype=predicted.estimated.pop)) +
  geom_line()
egg::ggarrange(p1, p2)

< STRONG> < EM> Урожайность :

enter image description here

< Сильный > < EM > Данные

> dput(temp)
structure(list(continent = c("Africa", "Africa", "Africa", "Africa", 
"Africa", "Asia", "Asia", "Asia", "Asia", "Asia", "Europe", "Europe", 
"Europe", "Europe", "Europe", "Africa", "Africa", "Africa", "Africa", 
"Africa", "Asia", "Asia", "Asia", "Asia", "Asia", "Europe", "Europe", 
"Europe", "Europe", "Europe"), year = c(1995, 2000, 2005, 2010, 
2015, 1995, 2000, 2005, 2010, 2015, 1995, 2000, 2005, 2010, 2015, 
2015, 2020, 2025, 2030, 2035, 2015, 2020, 2025, 2030, 2035, 2015, 
2020, 2025, 2030, 2035), urban.pop = c(30806083, 46209124.25, 
61612165.5, 77015206.75, 92418248, 105455596, 184545293, 263634990, 
342724687, 421814384, 24760494, 37140741, 49520988, 61901235, 
74281482, 92418248, 115522810, 138627372, 161731934, 184836496, 
421814384, 527267980, 632721576, 738175172, 843628768, 74281482, 
92851852.5, 111422223, 129992593.5, 148562964), predicted.estimated.pop = c("estimated.pop", 
"estimated.pop", "estimated.pop", "estimated.pop", "estimated.pop", 
"estimated.pop", "estimated.pop", "estimated.pop", "estimated.pop", 
"estimated.pop", "estimated.pop", "estimated.pop", "estimated.pop", 
"estimated.pop", "estimated.pop", "predicted.pop", "predicted.pop", 
"predicted.pop", "predicted.pop", "predicted.pop", "predicted.pop", 
"predicted.pop", "predicted.pop", "predicted.pop", "predicted.pop", 
"predicted.pop", "predicted.pop", "predicted.pop", "predicted.pop", 
"predicted.pop"), pop = c(30806083, 46209124.25, 61612165.5, 
77015206.75, 92418248, 105455596, 184545293, 263634990, 342724687, 
421814384, 24760494, 37140741, 49520988, 61901235, 74281482, 
92418248, 115522810, 138627372, 161731934, 184836496, 421814384, 
527267980, 632721576, 738175172, 843628768, 74281482, 92851852.5, 
111422223, 129992593.5, 148562964)), row.names = c(NA, -30L), class = "data.frame")

> str(temp)
'data.frame':   30 obs. of  5 variables:
 $ continent              : chr  "Africa" "Africa" "Africa" "Africa" ...
 $ year                   : num  1995 2000 2005 2010 2015 ...
 $ urban.pop              : num  30806083 46209124 61612166 77015207 92418248 ...
 $ predicted.estimated.pop: chr  "estimated.pop" "estimated.pop" "estimated.pop" "estimated.pop" ...
 $ pop                    : num  30806083 46209124 61612166 77015207 92418248 ...
2
jay.sf 20 Ноя 2018 в 20:31