drop =FALSE в ggplot scale_y_discrete не работает

#r #ggplot2

#r #ggplot2

Вопрос:

У меня проблема с масштабами ggplot. drop=FALSE отлично работает с другой таблицей данных, но не с данными ниже. Я просто хочу, чтобы отображались все уровни факторов, и по какой-то причине с этим набором данных он сбрасывает уровень 1.

 > dput(as.data.frame(v.prop))
structure(list(Year = c("2008", "2009", "2010", "2011", "2012", 
"2013", "2014", "2015", "2016", "2017", "2018", "2012", "2012", 
"2013", "2013", "2013", "2014", "2014", "2014", "2014", "2015", 
"2015", "2015", "2015", "2015", "2015", "2016", "2016", "2016", 
"2016", "2016", "2016", "2016", "2017", "2017", "2017", "2017", 
"2017", "2017", "2017", "2017", "2018", "2018", "2018", "2018", 
"2018", "2018", "2018", "2018", "2018"), Age = structure(c(1L, 
1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 3L, 4L, 3L, 4L, 5L, 3L, 
4L, 5L, 6L, 2L, 3L, 4L, 5L, 6L, 7L, 2L, 3L, 4L, 5L, 6L, 7L, 8L, 
2L, 3L, 4L, 5L, 6L, 7L, 8L, 9L, 2L, 3L, 4L, 5L, 6L, 7L, 8L, 9L, 
10L), .Label = c("0", "2", "3", "4", "5", "6", "7", "8", "9", 
"10"), class = "factor"), n = c(130, 28, 34, 77, 170, 18, 3, 
22, 43, 50, 151, 4, 3, 3, 6, 3, 1, 1, 10, 2, 1, 11, 12, 13, 8, 
7, 3, 6, 19, 15, 11, 8, 7, 8, 12, 21, 16, 13, 12, 5, 5, 10, 20, 
29, 31, 18, 9, 8, 3, 3), id = c("YOY", "YOY", "YOY", "YOY", "YOY", 
"YOY", "YOY", "YOY", "YOY", "YOY", "YOY", "Adult", "Adult", "Adult", 
"Adult", "Adult", "Adult", "Adult", "Adult", "Adult", "Adult", 
"Adult", "Adult", "Adult", "Adult", "Adult", "Adult", "Adult", 
"Adult", "Adult", "Adult", "Adult", "Adult", "Adult", "Adult", 
"Adult", "Adult", "Adult", "Adult", "Adult", "Adult", "Adult", 
"Adult", "Adult", "Adult", "Adult", "Adult", "Adult", "Adult", 
"Adult"), prop = c(1.3, 0.28, 0.34, 0.77, 1.7, 0.18, 0.03, 0.22, 
0.43, 0.5, 1.51, 0.571428571428571, 0.428571428571429, 0.25, 
0.5, 0.25, 0.0714285714285714, 0.0714285714285714, 0.714285714285714, 
0.142857142857143, 0.0192307692307692, 0.211538461538462, 0.230769230769231, 
0.25, 0.153846153846154, 0.134615384615385, 0.0434782608695652, 
0.0869565217391304, 0.27536231884058, 0.217391304347826, 0.159420289855072, 
0.115942028985507, 0.101449275362319, 0.0869565217391304, 0.130434782608696, 
0.228260869565217, 0.173913043478261, 0.141304347826087, 0.130434782608696, 
0.0543478260869565, 0.0543478260869565, 0.0763358778625954, 0.152671755725191, 
0.221374045801527, 0.236641221374046, 0.137404580152672, 0.0687022900763359, 
0.0610687022900763, 0.0229007633587786, 0.0229007633587786), 
    Cohort = structure(c(1L, 2L, 3L, 4L, 5L, 6L, 7L, 8L, 9L, 
    10L, 11L, 2L, 1L, 3L, 2L, 1L, 4L, 3L, 2L, 1L, 6L, 5L, 4L, 
    3L, 2L, 1L, 7L, 6L, 5L, 4L, 3L, 2L, 1L, 8L, 7L, 6L, 5L, 4L, 
    3L, 2L, 1L, 9L, 8L, 7L, 6L, 5L, 4L, 3L, 2L, 1L), .Label = c("2008", 
    "2009", "2010", "2011", "2012", "2013", "2014", "2015", "2016", 
    "2017", "2018"), class = "factor")), row.names = c(NA, -50L
), class = "data.frame")
  
 ggplot(v.prop, aes(x=Year, y=Age))  
  geom_point(aes(cex = prop, color = Cohort))  
  scale_y_discrete(drop = FALSE)  
  #scale_y_discrete(breaks = c(0:10), limits=c(0:10), labels = c(0:10), drop=FALSE)  
  labs(title = "Age frequency plot", subtitle = " video adult predicted lengths", y = "Age", x = "Year")  
  theme_bw()   theme(panel.border = element_blank(), panel.grid.major = element_blank(),
                     panel.grid.minor = element_blank(), axis.line = element_line(colour = "black"))
  

Это то, что я получаю, и, очевидно, цвета не совпадают.

Это то, что я получаю в итоге

Это отлично работает…

 > dput(as.data.frame(fdm.prop2))
structure(list(Year = c("2008", "2009", "2010", "2011", "2012", 
"2013", "2014", "2015", "2016", "2017", "2018", "2011", "2012", 
"2012", "2012", "2013", "2013", "2013", "2013", "2014", "2014", 
"2014", "2014", "2015", "2015", "2015", "2015", "2016", "2016", 
"2016", "2016", "2016", "2016", "2017", "2017", "2017", "2017", 
"2017", "2017", "2018", "2018", "2018", "2018", "2019", "2019", 
"2019", "2019"), Age = structure(c(1L, 1L, 1L, 1L, 1L, 1L, 1L, 
1L, 1L, 1L, 1L, 4L, 3L, 4L, 5L, 3L, 4L, 5L, 6L, 4L, 5L, 6L, 7L, 
5L, 6L, 7L, 8L, 4L, 5L, 6L, 7L, 8L, 9L, 4L, 5L, 6L, 7L, 8L, 9L, 
5L, 6L, 7L, 8L, 6L, 7L, 8L, 9L), .Label = c("0", "1", "2", "3", 
"4", "5", "6", "7", "8", "9"), class = "factor"), n = c(130, 
28, 34, 77, 170, 18, 3, 22, 43, 50, 151, 4, 1, 12, 26, 1, 1, 
15, 16, 2, 24, 20, 18, 14, 19, 5, 5, 2, 8, 14, 4, 2, 3, 2, 4, 
3, 4, 4, 1, 1, 11, 7, 4, 24, 22, 5, 1), id = c("YOY", "YOY", 
"YOY", "YOY", "YOY", "YOY", "YOY", "YOY", "YOY", "YOY", "YOY", 
"Adult", "Adult", "Adult", "Adult", "Adult", "Adult", "Adult", 
"Adult", "Adult", "Adult", "Adult", "Adult", "Adult", "Adult", 
"Adult", "Adult", "Adult", "Adult", "Adult", "Adult", "Adult", 
"Adult", "Adult", "Adult", "Adult", "Adult", "Adult", "Adult", 
"Adult", "Adult", "Adult", "Adult", "Adult", "Adult", "Adult", 
"Adult"), prop = c(0.65, 0.14, 0.17, 0.385, 0.85, 0.09, 0.015, 
0.11, 0.215, 0.25, 0.755, 0.0930232558139535, 0.0140845070422535, 
0.169014084507042, 0.366197183098592, 0.0222222222222222, 0.0222222222222222, 
0.333333333333333, 0.355555555555556, 0.02, 0.24, 0.2, 0.18, 
0.318181818181818, 0.431818181818182, 0.113636363636364, 0.113636363636364, 
0.0606060606060606, 0.242424242424242, 0.424242424242424, 0.121212121212121, 
0.0606060606060606, 0.0909090909090909, 0.111111111111111, 0.222222222222222, 
0.166666666666667, 0.222222222222222, 0.222222222222222, 0.0555555555555556, 
0.0434782608695652, 0.478260869565217, 0.304347826086957, 0.173913043478261, 
0.461538461538462, 0.423076923076923, 0.0961538461538462, 0.0192307692307692
), Cohort = c("2008", "2009", "2010", "2011", "2012", "2013", 
"2014", "2015", "2016", "2017", "2018", "2008", "2010", "2009", 
"2008", "2011", "2010", "2009", "2008", "2011", "2010", "2009", 
"2008", "2011", "2010", "2009", "2008", "2013", "2012", "2011", 
"2010", "2009", "2008", "2014", "2013", "2012", "2011", "2010", 
"2009", "2014", "2013", "2012", "2011", "2014", "2013", "2012", 
"2011")), row.names = c(NA, -47L), class = "data.frame")
  
 ggplot(fdm.prop2, aes(x=Year, y=Age))   
  geom_point(aes(cex = prop, color = Cohort))  
  scale_y_discrete(drop = FALSE) 
  labs(title = "Age frequency plot", subtitle = "fdm adult predicted lengths", y = "Age", x = "Year")  
  theme_bw()   theme(panel.border = element_blank(), panel.grid.major = element_blank(),
                     panel.grid.minor = element_blank(), axis.line = element_line(colour = "black"))

  

введите описание изображения здесь

Кажется, не имеет значения, что они одного и того же класса, структуры и всего остального. Это что-то глупое, что я сделал, или это ошибка?

Ответ №1:

Попробуйте этот подход, это то, что вы хотите? В ваших первых данных нет значения 1 Age , поэтому, если вы хотите его увидеть, вам нужно отформатировать переменную, чтобы включить этот уровень. Вот код (я использовал ваши первые данные v.prop ):

 #Format
v.prop$Age <- as.character(v.prop$Age)
v.prop$Age <- factor(v.prop$Age,levels = 0:10)
#Code
ggplot(v.prop, aes(x=Year, y=Age))  
  geom_point(aes(cex = prop, color = Cohort))  
  scale_y_discrete(drop = FALSE)  
  #scale_y_discrete(breaks = c(0:10), limits=c(0:10), labels = c(0:10), drop=FALSE)  
  labs(title = "Age frequency plot", subtitle = " video adult predicted lengths", y = "Age", x = "Year")  
  theme_bw()   theme(panel.border = element_blank(), panel.grid.major = element_blank(),
                     panel.grid.minor = element_blank(), axis.line = element_line(colour = "black"))
  

Вывод:

введите описание изображения здесь

А также для вашей проверки проверьте уровни в каждом наборе данных:

Для второго фрейма данных у вас есть:

 levels(fdm.prop2$Age)
 [1] "0" "1" "2" "3" "4" "5" "6" "7" "8" "9"
  

И для первого фрейма данных у вас есть:

 levels(v.prop$Age)
 [1] "0"  "2"  "3"  "4"  "5"  "6"  "7"  "8"  "9"  "10"
  

Таким образом, форматирование переменной Age , как и ранее, будет работать.

Комментарии:

1. Я не понимал, что это не учитывало бы уровни, если бы все они были последовательными, но я полагаю, что такова природа факторов. Спасибо, утка.