Как создать зеркальный барплот в ggplot2 с двумя разными классами? - PullRequest
0 голосов
/ 20 сентября 2018

У меня есть следующий пример фрейма данных:

`Значение класса черты

Trait Class Value
1     A     3
1     B     4
2     A     7
2     B     8

Я хочу создать диаграмму с помощью ggplot2, где значения для каждого класса отражаются по оси x.

Когда я пытаюсь построить его таким образом,

ggplot(cali_gca, aes(x=Trait, y=Value, fill=Class)) + 
 geom_bar(stat="identity", position="identity")

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

У кого-нибудь есть идеи, почему?

Заранее большое спасибо!

Graphic I get

Вот сюжет нарисованв краске я хотел бы иметь: Графика я хочу

1 Ответ

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

Вы можете взять часть данных, которую вы хотите отразить, умножить ее на (-1) и прикрепить к фрейму данных:

library(tidyverse)

df <- tribble(
  ~year, ~country, ~value,
  2001, "France", 55, 
  2002, "France", 53, 
  2003, "France", 31, 
  2004, "France", 10, 
  2005, "France", 30, 
  2006, "France", 37, 
  2007, "France", 54, 
  2008, "France", 58, 
  2009, "France", 50, 
  2010, "France", 40, 
  2011, "France", 49, 
  2001, "USA", 55,
  2002, "USA", 53,
  2003, "USA", 64,
  2004, "USA", 40,
  2005, "USA", 30,
  2006, "USA", 39,
  2007, "USA", 55,
  2008, "USA", 53,
  2009, "USA", 71,
  2010, "USA", 44,
  2011, "USA", 40
)

ggplot(df, aes(year, value, fill = country)) +
  geom_col()

df <- df %>% 
  bind_rows(df %>% 
              filter(country == "France") %>% 
              mutate(value = -value,
                     country = "-France"))

ggplot(df, aes(year, value, fill = country)) +
  geom_col()

, который выдает:

enter image description here

...