2013-02-19 13 views
16

To jest powtórzenie pytania pierwotnie zadanego tutaj: Indicating the statistically significant difference in bar graph, ale pytanie o R zamiast pythona.Wskazanie statystycznie znaczącej różnicy w wykresie słupkowym KORZYSTANIE Z R

Moje pytanie jest bardzo proste. Chcę produkować pręty w R, używając ggplot2, jeśli to możliwe, ze wskazaniem znaczącej różnicy między różnymi prętami, np. wyprodukować coś takiego. Miałem wyszukiwanie, ale nie mogę znaleźć innego pytania z prośbą o dokładnie to samo.

bar plot showing error bars and sig. diff marking beween bars

+0

Więc tylko sąsiednie kolumny? Brak wartości p dla A-C, B-D lub A-D? –

+0

Denerwująco (nie twoja wina), coś w mojej lokalnej zaporze zabija twój wizerunek. Czy możesz zamieścić link? –

+0

Przeprosiny za opóźnienie. Obraz tutaj: http://i.stack.imgur.com/3I6El.jpg –

Odpowiedz

15

Można użyć geom_path() i annotate() uzyskać podobny rezultat. W tym przykładzie musisz samodzielnie określić odpowiednią pozycję. W geom_path() podano cztery liczby, aby uzyskać te małe znaczniki dla linii łączących.

df<-data.frame(group=c("A","B","C","D"),numb=c(12,24,36,48)) 
g<-ggplot(df,aes(group,numb))+geom_bar(stat="identity") 
g+geom_path(x=c(1,1,2,2),y=c(25,26,26,25))+ 
    geom_path(x=c(2,2,3,3),y=c(37,38,38,37))+ 
    geom_path(x=c(3,3,4,4),y=c(49,50,50,49))+ 
    annotate("text",x=1.5,y=27,label="p=0.012")+ 
    annotate("text",x=2.5,y=39,label="p<0.0001")+ 
    annotate("text",x=3.5,y=51,label="p<0.0001") 

enter image description here

+0

Dzięki - OK, to trochę skrzypiące, ale tego właśnie chcę! Chyba nie ma łatwo dostępnego, ogólnego (automatycznego!) Sposobu na zrobienie tego –

+0

Oof, jakikolwiek sposób kontrolować geom_path przy użyciu faceting? –

+0

@JimBo Następnie potrzebna jest ramka danych dla wartości geom_path(), aw tej ramce danych należy również uwzględnić kolumnę o tej samej nazwie i poziomach, jaka będzie używana do faceting. –

3

użyłem Proponowany sposób z góry, ale okazało się, że funkcja adnotacji łatwiejszy do tworzenia wierszy niż funkcja geom_path. Po prostu użyj "segmentu" zamiast "tekstu". Musisz rozbijać rzeczy po segmencie i definiować początkowe i końcowe wartości xiy dla każdego segmentu linii.

przykład do wykonywania 3 linie segmentów:

annotate("segment", x=c(1,1,2),xend=c(1,2,2), y= c(125,130,130), yend=c(130,130,125)) 
11

wiem, że jest to stara pytanie i odpowiedź Didzis Elferts zapewnia już jedno rozwiązanie dla tego problemu. Ale niedawno stworzył ggplot-rozszerzenie, które upraszcza cały proces dodawania barów istotności: ggsignif

Zamiast żmudnego dodawania geom_path i annotate na swojej działce po prostu dodać pojedynczą warstwę geom_signif:

library(ggplot2) 
library(ggsignif) 

ggplot(iris, aes(x=Species, y=Sepal.Length)) + 
    geom_boxplot() + 
    geom_signif(comparisons = list(c("versicolor", "virginica")), 
       map_signif_level=TRUE) 

Boxplot with significance bar

Pełna dokumentacja pakietu jest dostępna pod adresem CRAN.

Powiązane problemy