2015-09-07 2 views
2

Я искал некоторые решения здесь, но нашел его только в том случае, когда переменная x является числовой. Так, к примеру, у меня есть этот набор данных:ggvis: Как я могу построить abline, когда переменная x категорична?

read.table(text="   bias   scenery algorithm treatment 
0.0038245022 pi10_40_cens35_40 Method1  T0 
0.0004553608 pi10_40_cens35_40 Method1  T1 
0.0217874958 pi10_40_cens35_40 Method2  T0 
0.0132069964 pi10_40_cens35_40 Method2  T1 
0.0135420058 pi10_40_cens35_40 Method4  T0 
0.0157829608 pi10_40_cens35_40 Method4  T1 
0.0230633621 pi10_40_cens35_40 Method3  T0 
0.0199919247 pi10_40_cens35_40 Method3  T1 
0.0751254422 pi10_40_cens60_65 Method1  T0 
0.0678869679 pi10_40_cens60_65 Method1  T1 
0.1037620465 pi10_40_cens60_65 Method2  T0 
0.0819120457 pi10_40_cens60_65 Method2  T1 
0.0893472639 pi10_40_cens60_65 Method4  T0 
0.0825019605 pi10_40_cens60_65 Method4  T1 
0.1031913181 pi10_40_cens60_65 Method3  T0 
0.1149319836 pi10_40_cens60_65 Method3  T1 
0.0048517692 pi20_30_cens35_40 Method1  T0 
0.0079070239 pi20_30_cens35_40 Method1  T1 
0.0203992390 pi20_30_cens35_40 Method2  T0 
0.0197634214 pi20_30_cens35_40 Method2  T1 
0.0142908113 pi20_30_cens35_40 Method4  T0 
0.0197736578 pi20_30_cens35_40 Method4  T1 
0.0216825265 pi20_30_cens35_40 Method3  T0 
0.0232048669 pi20_30_cens35_40 Method3  T1 
0.0576654516 pi20_30_cens60_65 Method1  T0 
0.0629337504 pi20_30_cens60_65 Method1  T1 
0.0954706388 pi20_30_cens60_65 Method2  T0 
0.0926100594 pi20_30_cens60_65 Method2  T1 
0.0793831867 pi20_30_cens60_65 Method4  T0 
0.0866745996 pi20_30_cens60_65 Method4  T1 
0.1020244131 pi20_30_cens60_65 Method3  T0 
0.1090028420 pi20_30_cens60_65 Method3  T1", 
      header=TRUE, stringsAsFactors=FALSE) -> tbl_sample 

Участок, что у меня есть интерес (без abline) получают путем:

tbl_sample %>% 
    group_by(algorithm) %>% 
    ggvis(~scenery,~bias, fill=~algorithm, shape=~treatment) %>% 
    add_legend("fill", properties = legend_props(legend = list(y = 20))) %>% 
    add_legend("shape", properties = legend_props(legend = list(y = 120))) %>% 
    add_axis("y",title="bias") %>% 
    layer_points() 

Статическая версия:

enter image description here

Теперь, как я могу получить точно такой же график, но с пунктирной горизонтальной линией на y = 0?

+0

попробуйте 'geom_hline (yintercept = 0, lty = 1)' или если необходимо 'geom_hline (yintercept = 0, lty = 1, aes (group = 1))'? –

+0

oops. 'aes (group = 1)' все еще может работать? –

+0

Это выглядит как лучший ответ: https://groups.google.com/forum/#!topic/ggvis/csYp7r3BwSA –

ответ

2

Из комментариев Convo, лучшее, что вы (вероятно) быть в состоянии сделать с ggvis, чтобы добавить:

layer_paths(~x, ~y, stroke:="red", 
      data=data.frame(x=c("pi10_40_cens35_40", "pi20_30_cens60_65"), 
          y=c(0.00 ,0.00))) 

для:

enter image description here

Вы можете делать то, что вы хочу в ggplot2 хотя:

library(ggplot2) 

gg <- ggplot() 
gg <- gg + geom_point(data=tbl_sample, 
         aes(x=scenery, y=bias, color=algorithm, shape=treatment)) 
gg <- gg + geom_hline(yintercept=0.00, color="red", linetype="dashed") 
gg <- gg + labs(x="Scenery", y="Bias", title=NULL) 
gg <- gg + theme_bw() 
gg 

enter image description here

+0

Удивительный! Я обязательно буду это использовать. Полагаю, что до сих пор стоит изучить ggplot2. Спасибо. – jbrettas

+0

- 'group_by (tbl_sample, algorithm)' действительно необходимо здесь? будет просто 'tbl_sample' работать ...? –

+0

Вы правы @BenBolker. Я просто сделал ленивую копию/пасту из моих локальных линий ggvis. – hrbrmstr