2017-05-18 8 views
1

動物のベクトルggplotを使用してヒストグラムプロットで離散変数をラベル付けする方法は?

ah<- c("Dog","Cat","Horse","Monkey","Dog","Fish","Horse","Dog","Cat","Horse","Cat","Horse","Dog","Cat","Monkey","Horse","Dog","Cat","Horse","Dog") 

hは動物1 =健全0 =健康ではない

h<-c(1,0,1,0,0,0,1,0,1,0,1,0,0,1,1,1,1,1,0,0) 

ヒストグラムプロット

data<- data.frame(animals=ah,healthy=h) 
ggplot(data,aes(animals,fill=as.factor(h)))+geom_histogram(stat="count") 

の地位を与える私はラベルを付けたいですパルク健康的な動物のentage:各バーの各バーの上部にある(例えば、イヌは、i)は、ラベルなどをしたい:数は、健康とenter image description here

健全ではない犬私はこの

のようないくつかの事をプロットする必要がありますenter image description here

答えて

2

まず、データのサマリーテーブルをカウントで生成する必要があります。私はここdplyr機能を使用しています:tidyrから

library(dplyr) 
tabDat <- data %>% group_by(animals, healthy) %>% 
       summarise(count = n()) %>% ungroup %>% 
       tidyr::complete(animals, healthy, fill = list(count = 0)) 

completeたちはanimalshealthy間のすべての可能な組み合わせを持っていることを確実にするために使用されます。

次に、テキストの位置をyと定義する必要があります。 healthy == 1にとっては、単にバーのサイズの半分であるとhealthy == 0のためにそれがバー+カウントのためhealthy == 1ためのバーの高さの半分であり、累積バーは割合を押収:

(tabDatY <- left_join(tabDat, tabDat %>% filter(healthy == 1) %>% 
       select(animals, y.basis = count), by = "animals") %>% 
       group_by(animals) %>% 
       mutate(y  = ifelse(healthy == 1, count/2, y.basis + count/2), 
        perc = count/sum(count), 
        y.sum = sum(count))) 

# Source: local data frame [10 x 7] 
# Groups: animals [5] 

# animals healthy count y.basis  y  perc y.sum 
#  <fctr> <dbl> <dbl> <dbl> <dbl>  <dbl> <dbl> 
# 1  Cat  0  1  4 4.5 0.2000000  5 
# 2  Cat  1  4  4 2.0 0.8000000  5 
# 3  Dog  0  4  2 4.0 0.6666667  6 
# 4  Dog  1  2  2 1.0 0.3333333  6 
# 5  Fish  0  1  0 0.5 1.0000000  1 
# 6  Fish  1  0  0 0.0 0.0000000  1 
# 7 Horse  0  3  3 4.5 0.5000000  6 
# 8 Horse  1  3  3 1.5 0.5000000  6 
# 9 Monkey  0  1  1 1.5 0.5000000  2 
# 10 Monkey  1  1  1 0.5 0.5000000  2 

今、あなたは使用することができますあなたのラベルをプロットするには、このデータ・フレーム:

gg <- ggplot(data, aes(animals)) + 
     geom_histogram(aes(fill = as.factor(healthy)), stat = "count") 
gg + geom_text(aes(y = y, label = count), data = tabDatY) + 
    geom_text(aes(y = y.sum + .2, label = paste0(round(perc * 100), "%")), 
       data = tabDatY %>% filter(healthy == 1)) 

enter image description here

+0

私は出力を得た.finally Uに感謝 – premon

関連する問題