Tôi muốn tạo ra một hình ảnh mà trông giống như sau:R âm mưu thanh tỷ lệ xếp chồng lên nhau với tỷ lệ yếu tố nhị phân và nhãn (với ggplot)
bộ dữ liệu ban đầu của tôi trông giống như sau:
> bb[sample(nrow(bb), 20), ]
IMG QUANT FIX
25663 1 1 0
7936 2 2 0
23586 3 2 0
23017 2 2 1
31363 1 3 1
7886 2 2 0
23819 3 3 1
29838 2 2 1
8169 2 3 1
9870 2 3 0
31440 2 1 0
35564 3 1 0
24066 1 2 0
12020 3 2 0
6742 3 2 0
6189 2 3 0
26692 2 3 0
1387 3 2 0
31839 2 3 1
28637 3 2 0
Vì vậy, ý tưởng là các thanh hiển thị nơi FIX = 1
mỗi yếu tố QUANT
và mỗi yếu tố IMG
.
tôi đã tổng hợp dữ liệu của tôi đặt vào tỷ lệ sử dụng plyr
library(plyr)
bb.perc <- ddply(bb,.(QUANT,IMG),summarise,FIX.PROP = sum(FIX)/length(FIX))
Nó gần điều đúng đắn:
QUANT IMG FIX.PROP
1 1 1 0.52439024
2 1 2 0.19085366
3 1 3 0.13658537
4 2 1 0.20414201
5 2 2 0.53964497
6 2 3 0.09585799
7 3 1 0.29000000
8 3 2 0.13000000
9 3 3 0.40705882
Nhưng bây giờ nếu tôi thực hiện một đồ thị, nó không tài khoản cho các trường hợp FIX==0
, nghĩa là tất cả các thanh có cùng chiều cao, cụ thể là 100%, đó không phải là những gì tôi muốn. Lưu ý cách subframes Quant cá nhân không thêm lên đến 100%:
> sum(bb.perc[1:3,]$FIX.PROP)
[1] 0.8518293
> sum(bb.perc[4:6,]$FIX.PROP)
[1] 0.839645
> sum(bb.perc[7:9,]$FIX.PROP)
[1] 0.8270588
Điều tốt nhất tôi có thể làm với R là để hiển thị đếm:
# Take only the positive samples
bb.pos <- bb[bb$FIX == 1,]
# Plot the counts
ggplot(bb,aes(factor(QUANT),fill=factor(IMG))) + geom_bar() +
scale_y_continous(labels=percent)
Và kết quả trong: Đây là cũng không phải những gì tôi muốn:
- Tỷ lệ phần trăm là cách tắt. Tôi cần một cách để vượt qua điểm 100% đến hàm
percent
, nhưng tôi không biết làm cách nào. - Nó thiếu nhãn.
Có rất nhiều tương tự câu hỏi về SO đã có, nhưng tôi dường như thiếu khoản tiền phù hợp của thông tin tình báo (hoặc hiểu biết về R) để ngoại suy từ họ đến một giải pháp cho vấn đề cụ thể của tôi.
Cảm ơn mọi con trỏ!
EDIT: Sven Hohenstein cung cấp một câu trả lời đã có, nhưng đây là cách tôi đã kết thúc làm việc đó bản thân mình cũng như:
> ggplot(bb.perc,aes(x=factor(QUANT),y=FIX.PROP,label=paste(round(FIX.PROP*100),
"%"),fill=factor(IMG)))+ geom_bar(stat="identity") + geom_text(position="stack",
aes(ymax=1),vjust=5) + scale_y_continuous(labels = percent)
Sử dụng bb.perc
mà tôi định nghĩa hơn nữa bằng cách sử dụng plyr
. Điều này có lợi thế rằng tỷ lệ phần trăm được tính cục bộ trên mỗi cột và không phải là trên toàn cầu.
Cảm ơn mọi người đã trợ giúp.Các đáng kể sau hai câu hỏi và tương ứng câu trả lời của họ đã giúp tôi trong việc đó đúng:
Stacked Bar Graph Labels with ggplot2
Adding labels to ggplot bar chart
Những gì tôi đã làm sai bước đầu, đã vượt qua các tham số position = "fill"
để geom_bar()
, mà vì một lý do làm cho tất cả các thanh có cùng chiều cao!
Thật tuyệt vời, cảm ơn! Tôi thực sự đã có ngay bây giờ nhận được đến điểm mà tôi đã có cốt truyện chính xác là tốt, nhưng tôi đã sử dụng cách 'plyr' để làm điều đó. Tôi không biết nó có thể từ bên trong ggplot! –