Ответ 1
Во-первых, предоставление выборочных данных поможет. Поскольку вы этого не сделали, вот некоторые из них:
MYdata <- data.frame(Age = rep(c(0,1,3,6,9,12), each=20),
Richness = rnorm(120, 10000, 2500))
Части 1 и 2 связаны с одной и той же проблемой. Age
- непрерывная переменная, но вы пытаетесь использовать ее в дискретном масштабе (указав цвет для определенных значений возраста). В общем случае масштаб отображает переменную на визуальную; для непрерывного возраста есть соответствующий цвет для любого возможного значения возраста, а не только те, которые появляются в ваших данных. Тем не менее, вы можете одновременно рассматривать возраст как категориальную переменную (фактор) для некоторой эстетики. Для третьей части вашего вопроса, в описании масштаба, вы можете определить конкретные метки, соответствующие конкретным перерывам в шкале. Соединяя это все вместе (и добавляя что-то, чтобы дать вам ось x, помеченную больше как то, что у вас есть в примере):
ggplot(data = MYdata, aes(x = Age, y = Richness)) +
geom_boxplot(aes(fill=factor(Age))) +
geom_point(aes(color = factor(Age))) +
scale_x_continuous(breaks = c(0, 1, 3, 6, 9, 12)) +
scale_colour_manual(breaks = c("0", "1", "3", "6", "9", "12"),
labels = c("0 month", "1 month", "3 months",
"6 months", "9 months", "12 months"),
values = c("#E69F00", "#56B4E9", "#009E73",
"#F0E442", "#0072B2", "#D55E00")) +
scale_fill_manual(breaks = c("0", "1", "3", "6", "9", "12"),
labels = c("0 month", "1 month", "3 months",
"6 months", "9 months", "12 months"),
values = c("#E69F00", "#56B4E9", "#009E73",
"#F0E442", "#0072B2", "#D55E00"))
С этой цветовой схемой точки, которые попадают внутрь коробки, не видны (поскольку они имеют тот же цвет, что и заполнение ящика). Возможно, оставив коробку полого и вычерчивая ее линии в цвете, было бы лучше.
ggplot(data = MYdata, aes(x = Age, y = Richness)) +
geom_boxplot(aes(colour=factor(Age)), fill=NA) +
geom_point(aes(color = factor(Age))) +
scale_x_continuous(breaks = c(0, 1, 3, 6, 9, 12)) +
scale_colour_manual(breaks = c("0", "1", "3", "6", "9", "12"),
labels = c("0 month", "1 month", "3 months",
"6 months", "9 months", "12 months"),
values = c("#E69F00", "#56B4E9", "#009E73",
"#F0E442", "#0072B2", "#D55E00"))
Наконец, подумайте, действительно ли вам нужно по-разному окрасить каждый возраст, так как они уже четко определены по оси x.