2015-04-17 1 views
3

Я работаю на визуализации некоторые модели в сети передачи данных и некоторые вопросы маркировки линии, где у меня есть несколько классов линий:Легенды и этикетирование гладкие установлены линии + дополнительные линии с использованием ggplot2

  1. лессовые линии для каждого фактора (сеть)
  2. базовых при у = 4000
  3. гам линии, которая действует на всех данные (не учитывается)

Теперь, переполнение стека помогло получить меня в этот момент (спасибо!) , но Я чувствую, как я побежал в кирпичную стену для того, что мне нужно сделать:

A. обеспечивают запись легенды для линии № 3

B. этикеточной каждая линия на графике (в соответствии с # 1 # 2 # 3 - так 8 строк всего)

Вот код, который я до сих пор:

p <- ggplot(network_data, aes(x=timeofday,y=dspeed, colour=factor(network)))+stat_smooth(method="loess",formula=y~x,se=FALSE) 
p <- p + stat_function(fun=function(x)4000, geom="line", linetype="dashed", aes(colour="Baseline")) 
p <- p + xlab("Time of Day (hr)") + ylab("Download Speed (ms)") 
p <- p + theme(axis.line=element_line(colour="black")) 

# add the gam line, colouring it purple for now 
q <- layer(data=network_data, mapping=aes(x=timeofday,y=dspeed), stat="smooth" 
     , stat_params=list(method="gam", formula=y~s(x), se=FALSE), geom="smooth", geom_params=list(colour="purple"), position=position_identity()) 

graph <- p+q # add the layer 

#legend 
graph <- graph+scale_colour_discrete(name="network") 

# set up the origin correctly and axes etc 
graph2 <- graph + scale_y_continuous(limits=c(0,6500), expand=c(0,0), breaks=c(0,1000,2000,3000,4000,5000,6000)) + scale_x_datetime(limits=as.POSIXct(c("2015-04-13 00:00:01","2015-04-13 23:59:59")), expand = c(0, 0), breaks=date_breaks("1 hour"), labels=date_format("%H")) 

Счастлив рассмотреть другие пакеты, но ggplot2 кажется лучшим до сих пор.

Есть ли способ сделать это «автоматически» (через программирование), поскольку я пытаюсь автоматизировать генерацию этих графиков?

Я сделал доступные данные здесь в виде файла .Rda:

https://dl.dropboxusercontent.com/u/5268020/network_data.Rda

А вот изображение текущего участка:

enter image description here

+0

не уверен, что я понимаю: для A) есть уже легенда, а B) легенда также намечает линии, вы хотите, чтобы текст над каждой строкой обозначал # 1, ..., # 8? – rawr

+0

Линия гаммы не отображается в легенде. Кажется, мне нужно добавить это как слой (q). Я также хочу, чтобы каждая строка помечена как с помощью direct.label. Я не мог понять, как добавить метку для каждой строки в конце встроенной линии (и базовой линии). –

+0

Я думал о других подходах. Хотя, возможно, неуклюжий, я занимаюсь созданием копии данных, заменяя сетевые данные в копии «одним фактором» (называя ее «общий» или что-то подобное), а затем объединяя два набора данных. Я пробую это сегодня вечером. –

ответ

0

Для д B, попробуйте annotate и введите код вручную в поле и текст для метки каждой строки. Кажется ненужным, учитывая легенду.

+0

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

+0

«Клиент всегда прав» –

+0

Да, действительно, клиент всегда прав :) С аннотатом это означает, что он не может быть автоматически выполнен для разных наборов данных - я попытался direct.label с last.points, но я думаю он просто помещает его в последнюю точку данных для каждого фактора (все еще пропуская базовую линию и гам, iirc), а не на подогнанной линии. –