Построение нескольких линий в GGplot с разными линиями, соответствующими разному году - PullRequest
0 голосов
/ 20 ноября 2018

Я пытаюсь использовать ggplot для построения нескольких линий (по годам) для средних значений категориальной переменной.Я в тупике и перепробовал разные вещи, но не могу получить именно то, что хочу.У меня есть необработанные наблюдения, в которых есть отметка года для каждого наблюдения и прикрепленная к ним величина убытка, но здесь приведен снимок того, как я пытался сгруппировать средние потери по годам / судебной ориентации.

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

Моя цель такова:

Мне нужен один график спеременное количество уровней в зависимости от переменной (для JudicialOrientation у меня есть 3 уровня: Защита, Нейтральный, Истец), так что это будут значения x, затем я хочу иметь линейный график, соединяющий средние значения между каждыми 3 уровнями, но я хочу, чтобы несколько линийпредставляют 2006, 2007, 2008 и т. д.

Таким образом, у меня будут разные цветные линии, которые соответствуют значению MeanLoss другого года для этого конкретного уровня.Я надеюсь, что это имеет смысл.

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

Пока попытка:

ggplot() +geom_line(data=df1, aes(x=JudicialOrientation, y = MeanLoss, color=Year))

Пример кадра данных с некоторым кодом dplyr для получения совокупного значения:

df <-data.frame(Year=c("2006","2006","2006","2007","2007","2007","2008","2009","2010","2010","2009","2009"), 
           JudicialOrientation=c("Defense","Plaintiff","Plaintiff","Neutral","Defense","Plaintiff","Defense","Plaintiff","Neutral","Neutral","Plaintiff","Defense"),
           Loss = c(100000,100,2500,100000,25000,0,7500,5200, 900,100,0,50)
           )


df1 <- df%>% group_by(Year,JudicialOrientation) %>% summarise(MeanLoss =mean(Loss))

ПустьЯ знаю любые советы, которые вы можете иметь.Спасибо!

1 Ответ

0 голосов
/ 21 ноября 2018

Полагаю, вы увидели сообщение после запуска кода.

geom_path: каждая группа состоит только из одного наблюдения.Вам нужно настроить эстетику группы?

Таким образом, настройка эстетики группы даст вам это

ggplot(data = df1, aes(x = JudicialOrientation, y = MeanLoss, color=Year, group = Year)) +
  geom_line() +
  geom_point()

enter image description here

Я добавил geom_point, чтобы вы увидели, что значения, например, для 2008 года действительно есть.Вы не увидите их только с geom_line.Надеюсь это поможет.


Вы можете даже позволить stat_summary выполнить агрегацию за вас и использовать df напрямую.

Вот как

ggplot(df, aes(x = JudicialOrientation, y = Loss, color = Year, group = Year)) +
  stat_summary(geom = "line", fun.y = mean) +
  stat_summary(geom = "point", fun.y = mean)
...