Elrejtése doboz és a szakáll a geom_boxplot () ha n kicsi

szavazat
1

Én gyakran teszik boxplots ahol bizonyos kategóriák meglehetősen kicsi, és mások is bőséges adatok felett helyezkednek jittered nyers adatpontok. Keresem megbízható módon elrejteni a dobozt és bajusz kategóriák, amelyek nagyon kis (N <5). A cél az, hogy azok a kis kategória mutatna csak a nyers adatokat egy geom_point () réteg, de a kategória, ahol van értelme lenne, hogy a box-and-whisker kezelést. A dolog, hogy nyilvánvalónak tűnt számomra, térképezési alfa a geom_boxplot () réteg egy tényező függvényében változik N, nem működik, mert az alfa csak vezérli a töltési és talán a kiugró geom_boxplot, nem a doboz és a bajuszát.

Találtam egy kludgey megoldást a múltban, hogy működött, amíg hajlandó voltam pazarolja a szín paraméter ezt a problémát. Azonban gyakran szeretnék, hogy valóban használható színes valami mást, és feltérképezi kétszer vezet csomós kimenet. Tovább kludgey megoldás eszembe egy olyan adatok részhalmaza amelyekből kis kategóriákat törölték - a probléma ezzel a terv, hogy nem kezeli helyesen a helyzetek, amikor ezek a kategóriák alá position_dodge () (a Dodge „látni túl kevés kategória).

Minimális alábbi példa.

df <- data.frame(group=factor(sample(c(A,B), size=110, replace=TRUE)),
                 sex=factor(c(rep(M,50), rep(F, 50), rep(NB, 10))),
                 height=c(rnorm(50, 70, 6), rnorm(50, 63, 6), rnorm(10, 65, 6)))

dfsub <- filter(df, !(sex==NB & group==A))

ggplot(df, aes(x=group, y=height, colour=sex)) +
  geom_boxplot(data=dfsub) +
  geom_point(position=position_jitterdodge(jitter.width=0.2))
A kérdést 10/10/2019 00:44
a forrás felhasználó
Más nyelveken...                            


2 válasz

szavazat
0

Használhatja position_dodge(preserve = "single")a geom_boxplot()mondani ggplot hogy állandó szélességű boxplots még hiányzó adatokat.

require(tidyverse)

df <- data.frame(group = factor(sample(c("A", "B"), size = 110, replace = TRUE)),
                 sex = factor(c(rep("M", 50), rep("F", 50), rep("NB", 10))),
                 height = c(rnorm(50, 70, 6), rnorm(50, 63, 6), rnorm(10, 65, 6)))

n <- df %>% #calculate sample sizes
  group_by(group, sex) %>%
  summarize(n = n())

df <- left_join(df, n) %>% #join sample sizes to df
  #make second height column to use for boxplots: NA values if n is too small
  mutate(boxplot_height = ifelse(n < 5, NA, height)) 


ggplot(df, aes(x = group, colour = sex)) +
  #use height column that has groups with n < 5 coded as NA to plot boxplots
  geom_boxplot(aes(y = boxplot_height),
               #preserve = "single" maintains constant width of boxes 
               position = position_dodge(preserve = "single")) +
  geom_point(aes(y = height), #use all height data as y variable for points
             position = position_jitterdodge(jitter.width = 0.2))

írja kép leírása itt

Válaszolt 10/10/2019 18:53
a forrás felhasználó

szavazat
0

Oké, nem hiszem, hogy ez a módja feltétlenül jobb, mint a jelenlegi lehetőségek, de ... eltörne a DF dfs a box-plot és egy szórási, és módosítsa az értékeket a kívánt adatokat eltávolítjuk a box-plot, hogy legyen kiút tartomány (pl 1000 itt). Ezután ábrázolja mind, és végül használja coord_cartesiana nagyítás a vonatkozó részt.

Létrehozásához df_box, mi csoport groupés sexés módosítsa az értékeket a csoportok <5 adatpontok 1000 (úgy, hogy nem kell a kemény kódot, amely értékek változhatnak).

df <- data.frame(group=factor(sample(c("A","B"), size=110, replace=TRUE)),
                 sex=factor(c(rep("M",50), rep("F", 50), rep("NB", 10))),
                 height=c(rnorm(50, 70, 6), rnorm(50, 63, 6), rnorm(10, 65, 6)))

df_box <- df %>%
    group_by(group, sex) %>%
    mutate(temp = ifelse(n() < 5, 1000, 1)) %>%
    ungroup() %>%
    mutate(height = ifelse(temp == 1000, 1000, height)) %>%
    select(-temp)

ggplot(df, aes(x=group, y=height, colour=sex)) +
    geom_boxplot(data=df_box) +
    geom_point(position=position_jitterdodge(jitter.width=0.2)) +
    coord_cartesian(ylim=c(50,90))

kép

Válaszolt 10/10/2019 01:13
a forrás felhasználó

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more