Укладка расчетных участков в фацетной форме

Мой вопрос похож на этот вопрос тем, что я хочу того же результата. Однако я не думаю, что мои данные могут быть расплавлены таким же образом, так как они рассчитаны на основе значений ИСТИНА / ЛОЖЬ.

Мои данные и графики следующие:

library(ggplot2)
library(gridExtra)
library(grid)
library(scales)
library(RColorBrewer)

#test dataframe
player <- c("a", "b", "a", "b", "c", 
            "a", "a", "b", "c", "b", 
            "c", "a", "c", "c", "a",
            "c", "c", "c", "c", "c",
            "c", "c", "c", "c", "c",
            "c", "c", "c", "c", "c",
            "b", "b", "b", "b")
is.winner <- c(TRUE, TRUE, TRUE, TRUE, TRUE, 
               FALSE, TRUE, TRUE, TRUE, FALSE, 
               TRUE, TRUE, TRUE, TRUE, FALSE,
               TRUE, FALSE, FALSE, FALSE, FALSE,
               TRUE, FALSE, FALSE, FALSE, FALSE,
               FALSE, FALSE, FALSE, FALSE, FALSE,
               TRUE, TRUE, FALSE, FALSE)

df <- data.frame(player, is.winner)

df$is.winner <- factor(df$is.winner, levels=c("TRUE", "FALSE")) #swap T/F bars

# Stacked wins and losses
aa <- ggplot(data=df, aes(x=player, fill=is.winner)) +
       stat_bin(geom = "bar", position = "stack") +
       scale_fill_brewer(palette="Set2") +
       coord_flip()

# Win percentage
ab <- ggplot(data=df, aes(x=player)) +
        geom_bar(aes(fill=is.winner),position='fill')+
        scale_y_continuous(labels=percent)+
        scale_fill_brewer(palette="Set2") +
        xlab("player") +
        ylab("win%") +
        coord_flip()

grid.arrange(aa,ab,ncol=2)

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

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

1 ответ

Решение

Вы могли бы сделать фиктивную переменную фацетирования,

d <- lattice::make.groups(first=df, second=df)

ggplot(data=d, aes(x=player, fill=is.winner)) +
  facet_grid(which~., scales="free") +
  geom_bar(position = "stack", data=subset(d, which=="first")) +
  geom_bar(position = 'fill', data=subset(d, which=="second")) +
  scale_fill_brewer(palette="Set2")

Интересно, что переключение координат приводит к неправильному графику, по крайней мере с версией dev ggplot2.

  last_plot() + coord_flip()

Другие вопросы по тегам