ggplot boxplot: position_dodge не работает - PullRequest
0 голосов
/ 05 сентября 2018

Я сделал относительно простой коробочный график с ggplot

ggplot(l8tc.df_17_18,aes(x=landcover,y= tcw_17, group=landcover))+
geom_boxplot()+
geom_boxplot(aes(y= tcw_18),position_dodge(1))

Снимок экрана, чтобы получить представление об используемых данных:

screenshot of data frame

Это вывод:

boxplot

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

Я все еще новичок в ggplot.

Есть идеи?

1 Ответ

0 голосов
/ 05 сентября 2018

Вы должны использовать в этом случае другой формат данных и расплавить его.

require(reshape2) 
require(tidyverse) 

# format data
melted_data <- l8tc.df_17_18 %>%
    select(landcover, tcw_17, tcw_18) %>%  
    melt('landcover', variable.name = 'tcw')

# plot
ggplot(melted_data, aes(x = as.factor(landcover), y = value)) + geom_boxplot(aes(fill = tcw))

Уклонение должно быть автоматическим, но если вы не хотите экспериментировать, используйте geom_boxplot(aes(fill = tcw), position = position_dodge())
https://ggplot2.tidyverse.org/reference/position_dodge.html

Вы можете записать его в одну строку, не создавая временный файл

l8tc.df_17_18 %>% 
    select(landcover, tcw_17, tcw_18) %>% 
    melt('landcover', variable.name = 'tcw') %>% 
    ggplot(aes(x = as.factor(landcover), y = value)) + geom_boxplot(aes(fill = tcw))
...