Как отобразить метки в конце добавленных geom_lines? - PullRequest
0 голосов
/ 03 мая 2019

У меня есть датафрейм, содержащий несколько столбцов.

Вот выдержка из моего фрейма данных:

    emp_dayNumber emp_dayName emp_workedDays emp_fullPrice emp_halfFare emp_monthly emp_yearly
1               1         mon           TRUE          23.7       117.20      117.66    1058.84
2               2         tue           TRUE          47.4       129.05      117.66    1058.84
3               3         wed           TRUE          71.1       140.90      117.66    1058.84

Я строю переменные emp_fullPrice, emp_halfFare, emp_monthly и emp_yearly, используя ggplot2.Чтобы отобразить ярлыки, я искал в Интернете и нашел рекомендации для библиотеки ggrepel .Кажется, это работает, но только для первой geom_line на моем графике.

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

|
|
|                                  / 1209
|      ___________________________/  
|     /                          ____
|    /                 _________/
|   /__________       /
|  /           \_____/_______
| /                 /        \_______ 
|/_________________/_________________ 

Как видите, мне удалось получить метку для первого значения (emp_fullPrice, т. Е. 1209), но не для остальных.

Вот код моего графика:

p<- ggplot(emp.data, aes(emp_dayNumber, emp_fullPrice))+
  geom_line(colour=1, size=1.3)+
  geom_line(aes(y=emp_halfFare),colour=2, size=1.3)+
  geom_line(aes(y=emp_monthly),colour=3, size=1.3)+
  geom_line(aes(y=emp_yearly),colour=4, size=1.3)+

  #Label at the end of the line
  geom_text_repel(
    data = subset(emp.data, emp_dayNumber == 154),
    aes(label = emp_fullPrice),
    size = 4,
    nudge_x = 5);

print(p)

Насколько я понимаю, он работает для значения, отображаемого в ggplot(), но не в значениях, которые я добавил с geom_lines().

У кого-нибудь есть решение?Спасибо, любезно.

1 Ответ

0 голосов
/ 03 мая 2019

Первый шаг, который сделает это намного проще для вас, - это измените форму ваших данных.

Попробуйте пакет reshape2, созданный Хэдли Уикхем, создателем ggplot.

Если бы вы применили функцию «melt» к вашему data.frame, вы бы получили data.frame с двумя столбцами: один для значений (числа в вашем data.frame) и один для типа off. значения (имена столбцов вашего data.frame).

Как пример:

emp.data <- data.frame("emp_dayNumber" = 1:100,
                       "emp_monthly" = rnorm(100),
                       "emp_yearly" = rnorm(100),
                       "emp_WorkedDays" = sample(c(TRUE,FALSE), 100, replace = TRUE))
library(reshape2)

## Select the colums you want to plot:
select.data <- emp.data[ , 1:3]

## Change the data.frame to a long format, and state that you want to keep "emp_dayNumber" variable
## as a separate column (as you use it for the x-axis)
plot.data <- melt(emp.data, id.vars = "emp_dayNumber")

Ваши данные теперь должны выглядеть так:

  emp_dayNumber    variable      value
1             1 emp_monthly  0.4231487
2             2 emp_monthly -1.0966351
3             3 emp_monthly  0.2761555
4             4 emp_monthly  0.8575178
5             5 emp_monthly -0.8528019
6             6 emp_monthly  0.4341048

Теперь постройте ваши данные, где «emp_dayNumber» должен быть вашим x, «value» - вашим y, а «variable» - вашим цветом

ggplot(toplot.data, aes(x = "emp_dayNumber", y = "value", color = "variable")) +
    geom_line()

Старайтесь всегда применять это ко всем вашим функциям построения графиков. Это в конечном итоге сэкономит вам много времени. Дополнительные пояснения по длинному и широкому формату см .: http://www.cookbook -r.com / Manipulating_data / Converting_data_between_wide_and_long_format /

Используя это, вы теперь можете применить решение, указанное в посте, связанном в комментарии с «mnm», или с помощью «ggrepel», поскольку теперь вы используете только одну переменную y!

...