Дублированные переменные в одной легенде (насколько я вижу, не частая проблема) - PullRequest
0 голосов
/ 01 января 2019

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

  1. Я работаю над функцией, которая позволяет мне обновлять информационный фрейм с ежемесячными расходами на это.год, а затем генерировать различные участки, чтобы следить за моим бюджетом.Мои переменные, так сказать, имеют два «свойства».Они относятся к определенной статье, и каждая статья является либо прогнозом (то есть запланированным), либо фактическими расходами.Первоначально я хотел, чтобы каждый элемент имел один цвет и два типа линий (сплошные для прогнозируемых, сплошные пунктирные для фактических расходов).Так, например, зеленый для экономии, прогнозируемая экономия с помощью сплошной линии, фактическая экономия с пунктирной линией.Я хотел получить две легенды, одна из которых отображает только цвета (то есть предметы), а другая - только два типа линий (сплошная, пунктирная), чтобы читатель мог сложить их вместе (и, следовательно, иметь меньшеВсего элементов легенды).Если у кого-то есть решение этой проблемы, я был бы очень рад узнать.Тем не менее, вот что я пытаюсь решить сейчас:

  2. Я уже отказался от этого первоначального намерения и согласился на легенду с каждым видом строки, получая одну запись легенды.Это то, что было введением (выше).Несмотря на одинаковое имя легенды, метки переменных и их правильное количество, каждая переменная теперь появляется дважды.Я хотел бы знать, почему я получаю эти двойные записи и найти решение.Я перепробовал все виды вещей в течение многих часов и не нашел никого с подобной проблемой (поскольку у меня возникают более "нормальные" проблемы с поиском по ключевым словам).

  3. Одна странная вещь, которую ятакже отметили, что переменная «Добавить доход» не ведет себя как другие переменные, поскольку она появляется только один раз.

  4. Причина, по которой в кадре данных много значений NA (ниже), потому что эти цифры должны быть заполнены в df, а затем нанесены на график в течение года.

Код:

ggplot(fin2019Long, aes(x=month, y=value, colour=variable)) +   geom_line(aes(linetype=variable)) + geom_point() +
labs(title = "Projected expenditure and saving", y = "Euros", x = "Month") +
scale_x_continuous("Month", breaks= c(1:12)) +
scale_colour_manual(name = "Items", 
                  values=c("green","green", "yellow", "yellow", "blue", "blue", "red", "red", "orange"), 
                  labels=c(rep("Living expend.", 2), rep("Debt repay.", 2), rep("Saving", 2), rep("Furn. fund", 2), "Extra pay")) +
scale_linetype_manual(name = "Items", 
                    values=c(rep(c("solid", "twodash"), 4), "twodash"), 
                    labels=c(rep("Living expend.", 2), rep("Debt repay.", 2), rep("Saving", 2), rep("Furn. fund", 2), "Extra pay"))

Данные:

structure(list(month = c(1L, 2L, 3L, 4L, 5L, 6L, 7L, 8L, 9L, 
10L, 11L, 12L, 1L, 2L, 3L, 4L, 5L, 6L, 7L, 8L, 9L, 10L, 11L, 
12L, 1L, 2L, 3L, 4L, 5L, 6L, 7L, 8L, 9L, 10L, 11L, 12L, 1L, 2L, 
3L, 4L, 5L, 6L, 7L, 8L, 9L, 10L, 11L, 12L, 1L, 2L, 3L, 4L, 5L, 
6L, 7L, 8L, 9L, 10L, 11L, 12L, 1L, 2L, 3L, 4L, 5L, 6L, 7L, 8L, 
9L, 10L, 11L, 12L, 1L, 2L, 3L, 4L, 5L, 6L, 7L, 8L, 9L, 10L, 11L, 
12L, 1L, 2L, 3L, 4L, 5L, 6L, 7L, 8L, 9L, 10L, 11L, 12L, 1L, 2L, 
3L, 4L, 5L, 6L, 7L, 8L, 9L, 10L, 11L, 12L), variable = structure(c(1L, 
1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 2L, 2L, 2L, 2L, 2L, 
2L, 2L, 2L, 2L, 2L, 2L, 2L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 
3L, 3L, 3L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 5L, 
5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 6L, 6L, 6L, 6L, 6L, 
6L, 6L, 6L, 6L, 6L, 6L, 6L, 7L, 7L, 7L, 7L, 7L, 7L, 7L, 7L, 7L, 
7L, 7L, 7L, 8L, 8L, 8L, 8L, 8L, 8L, 8L, 8L, 8L, 8L, 8L, 8L, 9L, 
9L, 9L, 9L, 9L, 9L, 9L, 9L, 9L, 9L, 9L, 9L), .Label = c("livingExpProj", 
"livingExp", "debtRepayProj", "debtRepay", "savingProj", "saving", 
"furnFundProj", "furnFund", "addIncome"), class = "factor"), 
value = c(1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 
1000, 1000, 1000, 1000, NA, NA, NA, NA, NA, NA, NA, NA, NA, 
NA, NA, NA, 600, 600, 600, 600, 600, 600, 600, 600, 600, 
600, 600, 600, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 
NA, 500, 500, 500, 500, 500, 500, 500, 500, 500, 500, 500, 
500, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 100, 
100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, NA, 
NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 
NA, NA, NA, NA, NA, NA, NA, NA)), row.names = c(NA, -108L
), class = "data.frame") 

1 Ответ

0 голосов
/ 01 января 2019

Разделение столбца variable на два столбца облегчит управление:

fin2019Long$type <- ifelse(grepl('Proj$', fin2019Long$variable), 'Planned', 'Spending')
fin2019Long$variable2 <- gsub('Proj$', '', fin2019Long$variable)

ggplot(fin2019Long, aes(x=month, y=value, colour=variable2)) +
    geom_line(aes(linetype=type)) + geom_point() +
    labs(title = "Projected expenditure and saving", y = "Euros", x = "Month") +
    scale_x_continuous("Month", breaks= c(1:12))

enter image description here

...