#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. Я не понимал, что это не учитывало бы уровни, если бы все они были последовательными, но я полагаю, что такова природа факторов. Спасибо, утка.