2015-10-12 2 views
0

я создал сюжет с использованием ggplot2 пакета в R, используя следующие данные:Использование geom_segment для построения стрелок для выбранных точек на существующий участке

# Ind filt objs  flux filt objs err_flux# 

01 4590 obj1 1005.448892 4590 errobj1 0.0401 
02 6220 obj1 1420.626789 6220 errobj1 0.0392 
03 7640 obj1 1855.581355 7640 errobj1 0.0432 
*.......skipped lines...*  
20 21512 obj2 949.642188 21512 errobj2  0.1516  
21 2030 obj2 9.838299 2030 errobj2 **0.0000** 
22 2253 obj2 17.097003 2253 errobj2 **0.0000** 
23 2612 obj2 14.754347 2612 errobj2 **0.0000** 
24 3470 obj2 14.890868 3470 errobj2 **0.0000** 

Я черчение потока против фильта с ggplot а затем добавление полос y-ошибок, как определено в столбце err_flux. Я хотел бы нарисовать стрелки из точек данных, для которых err_flux == 0..

Вот моя программа до сих пор:

g <- ggplot(finaldata[1:26, ], aes(x = filt, y = log10(flux), color = objs)) 
gf1 <- g + geom_point(size = 2, alpha = 0.8, pch = 15) + theme_bw() 
gf <- gf1 + geom_errorbar(aes(ymax = log10(flux) + err_flux, 
           ymin = log10(flux) - err_flux), 
          size = 0.5, color = "darkgrey") 
gff <-gf + xlab("wavelength") + ylim(0.3,4.5) + 
      geom_smooth(method = "loess", se = FALSE) 
gfinal <- gff + scale_color_hue(l = 10, c = 75) 

Полученный график показан ниже: enter image description here

Вот что я пытался добавить стрелки (например, 4 крайние левые точки для «obj2» в сюжете было показано выше, но он не работает:

for (i in 1:nrow(finaldata)) { 
if (finaldata$err_flux==0.){ 
    gfinal<-gfinal + geom_segment(x=finaldata$filt[i], y=finaldata$flux[i], xend=finaldata$filt[i], yend=finaldata$flux[i]-0.5,arrow=arrow(length=unit(0.25,"cm"))) 
    } 
} 

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

Любые предложения/помощь будут оценены.

+0

Использование 'annotate' , и не используйте цикл 'for'. Подстройте данные до тех, которые вы хотите аннотировать, и используйте аргумент 'data'. – Gregor

+0

@Gregor: Это первый раз, когда я пытаюсь работать с R для построения графика, поэтому это то, что я пробовал: 'sub <-subset (finaldata [1:26,], finaldata $ err_flux == 0.) gfinal + annotate (sub, x = sub $ filter, xend = sub $ filt, y = sub $ flux, yend = sub $ flux-0.5, color = "red") ' – Phyast10

+1

nevermind! Мне нужно было определить это следующим образом: 'annotate (« segment », x = sub $ filter, xend = sub $ filt, y = log10 (sub $ flux), yend = log10 (sub $ flux) -0.5, color =" red ")' – Phyast10

ответ

1

Функция Annotate помогла мне нарисовать вниз указательные стрелки (верхние границы) от выбранных точек данных.

я заменить последнюю часть моей программы, которая использовала для и если петля с geom_segment к annotate следующим образом:

sub<-subset(finaldata[1:26,],finaldata[1:26,]$err_flux==0.) 
gfinal+annotate("segment",x=sub$filt,xend=sub$filt,y=log10(sub$flux),yend=log10(sub$flux)-0.25,color="red",arrow = arrow(length = unit(0.2, "cm"))) 

который привел на следующем рисунке: See 4 <code>red</code> arrows on 4 leftmost data points for "obj2"

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