2017-01-07 2 views
5

Я создал линейную диаграмму (график) в R с метками на каждой точке данных. Из-за большого количества точек данных, график становится очень полным с метками. Я бы хотел применить метки только для последних N (скажем, 4) точек данных. Я пробовал подмножество и хвост в geom_label_repel function, но не смог найти их у нас или получил сообщение об ошибке. Мой набор данных состоит из 99 значений, распределенных по 3 группам (KPI).R ggplot: применить метку только к последним N точкам данных в графике

У меня есть следующий код в R:

library(ggplot) 
library(ggrepel) 

data.trend <- read.csv(file=....) 

plot.line <- ggplot(data=data.trend, aes(x = Version, y = Value, group = KPI, color = KPI)) + 

    geom_line(aes(group = KPI), size = 1) + 
    geom_point(size = 2.5) + 


    # Labels defined here 
    geom_label_repel(
    aes(Version, Value, fill = factor(KPI), label = sprintf('%0.1f%%', Value)), 
    box.padding = unit(0.35, "lines"), 
    point.padding = unit(0.4, "lines"), 
    segment.color = 'grey50', 
    show.legend = FALSE 
) 

); 

Я все справедливости, я совершенно новый для R. Может быть, я что-то пропустил основное.

Заранее спасибо.

+1

Просьба представить воспроизводимый пример или, по крайней мере, показать результирующий рисунок. –

ответ

6

простой подход это установить параметр data = в geom_label_repel включать только вопросы, которые вы хотите меченые.

Вот воспроизводимый пример:

set.seed(1235) 
data.trend <- data.frame(Version = rnorm(25), Value = rnorm(25), 
         group = sample(1:2,25,T), 
         KPI = sample(1:2,25,T)) 

ggplot(data=data.trend, aes(x = Version, y = Value, group = KPI, color = KPI)) + 
    geom_line(aes(group = KPI), size = 1) + 
    geom_point(size = 2.5) + 
    geom_label_repel(aes(Version, Value, fill = factor(KPI), label = sprintf('%0.1f%%', Value)), 
    data = tail(data.trend, 4),     
    box.padding = unit(0.35, "lines"), 
    point.padding = unit(0.4, "lines"), 
    segment.color = 'grey50', 
    show.legend = FALSE) 

enter image description here

К сожалению, это немного портит с алгоритмом отталкиваются, что делает размещение этикетки неоптимальное по отношению к другим точкам, которые не помечены (вы можете увидеть в приведенном выше рисунке, что некоторые точки покрываются метками).

Итак, лучший подход заключается в использовании color и fill просто сделать нежелательные ярлыки невидимыми (установив как цвет и заливку NA для этикеток, которые вы хотите скрыть):

ggplot(data=data.trend, aes(x = Version, y = Value, group = KPI, color = KPI)) + 
    geom_line(aes(group = KPI), size = 1) + 
    geom_point(size = 2.5) + 
    geom_label_repel(aes(Version, Value, fill = factor(KPI), label = sprintf('%0.1f%%', Value)), 
        box.padding = unit(0.35, "lines"), 
        point.padding = unit(0.4, "lines"), 
        show.legend = FALSE, 
        color = c(rep(NA,21), rep('grey50',4)), 
        fill = c(rep(NA,21), rep('lightblue',4))) 

enter image description here

+0

Спасибо, ты поставил меня в правильном направлении. Тем не менее, я вижу, что показаны только последние точки данных в 1 строке. Чтобы преодолеть это, я добавил список с версиями, которые я хочу построить, и использовать подмножество в поле данных, чтобы показывать их только. Это смешает функцию отталкивания, но это не проблема в моем случае. Большое спасибо! 'этикетки <- хвост (data.trend $ версия, 3) ..... geom_label_repel ( данных = подмножество (data.trend, data.trend $ Version% в% наклейками), АЕС (версия, Значение, fill = factor (KPI), label = sprintf ('% 0,1f %%', Value)), ... ) ' – user32556

Смежные вопросы