2013-05-27 11 views
20

próbuję wykreślić wykres używając ggplot2ggplot2 każda grupa składa się tylko z jednej obserwacji

Więc mam następujący dataframe:

iter  se perf name 
1 V1 0.6463573 12.8 e 
2 V2 0.3265986 16.8 e 
3 V3 0.2333333 19.1 e 
4 V4 0.1000000 19.9 e 
5 V5 0.0000000 20.0 e 
6 V1 0.7483315 12.6 f 
7 V2 0.6333333 16.3 f 
8 V3 0.6798693 18.8 f 
9 V4 0.2236068 19.5 f 
10 V5 0.1000000 19.9 f 

i staram się wykreślić go w formacie zbliżonym do to page (w ramach wykresów liniowych).

Więc tutaj jest kod do kreślenia:

pd <- position_dodge(.1) 
ggplot(df, aes(x=iter, y=perf, colour=name)) + 
    geom_errorbar(aes(ymin=perf-se, ymax=perf+se), width=.1, position=pd) + 
    geom_line(position=pd) + 
    geom_point(position=pd)+ 
    ylim(0, 20) 

i to działa dobrze: enter image description here, chyba że chcę te punkty mają być połączone. Próbowałem dodać group=1 lub group=name do tej części aes(x=iter, y=perf, colour=name), ale to nie pomogło.

ja również uzyskać te ostrzeżenia:

ymax not defined: adjusting position using y instead 
ymax not defined: adjusting position using y instead 
geom_path: Each group consist of only one observation. Do you need to adjust the group aesthetic? 

Po patrząc w internecie, okazało się, że dwa pierwsze są spowodowane position_dodge, ale myślę, że to ze względu na ggplot, trzecia jest w rzeczywistości, ponieważ z moich rozłączonych punktów.

Jakieś pomysły, jak je połączyć?

+2

Zdefiniuj mmm i ymax w "globalnym" estetycznym odwzorowaniu, aby uniknąć innych ostrzeżeń. – Roland

+3

Po prostu przenieś zawartość 'geom_errorbar'' aes' do 'ggplot'' aes'. – Roland

Odpowiedz

29

Trzeba dostosować estetykę grupy, należy wymienić:

geom_line(position=pd) 

przez

geom_line(position=pd,aes(group=name)) 

enter image description here

11

sprawdzić, czy typ danych jest czynnikiem przy użyciu is.factor(x), jeśli jest TRUE, następnie użyj funkcji as.integer.

Powiązane problemy