2012-12-05 48 views
23

Với bộ dữ liệu sau Stacked Bar:ggplot2 và một biểu đồ với giá trị âm

Division Year OperatingIncome 
1 A 2012   11460 
2 B 2012   7431 
3 C 2012   -8121 
4 D 2012   15719 
5 E 2012    364 
6 A 2011   12211 
7 B 2011   6290 
8 C 2011   -2657 
9 D 2011   14657 
10 E 2011   1257 
11 A 2010   12895 
12 B 2010   5381 
13 C 2010   -2408 
14 D 2010   11849 
15 E 2010    517 

Làm thế nào để hoàn thành một biểu đồ thanh xếp chồng lên nhau trong ggplot2 bao gồm các giá trị tiêu cực? Dưới đây là bảng xếp hạng tự cơ bản tôi đang sử dụng:

ggplot(income_m, aes(x=Year, y=OperatingIncome, fill=Division)) + geom_bar() + 
+ scale_fill_brewer(type = "seq", palette = 1) 

này trả về một lỗi:

Warning message: Stacking not well defined when ymin != 0

Và thay vì kết quả mong đợi - giá trị âm được hiển thị bên dưới trục X - họ chỉ đơn giản là không có mặt trong biểu đồ thanh xếp chồng. Có cách nào để sản xuất biểu đồ với tất cả các giá trị, cả tích cực và tiêu cực, chiếm không?

+0

Bạn đang tìm kiếm một cái gì đó như thế này http://stackoverflow.com/questions/12312189/r-floating-barchart/12312457#12312457 – mnel

+0

nhiều hơn như thế này: http://www.infragistics.com/uploadedImages/Content/Products/ASPNET/Whats_new/PositiveNegativeStackChartWeb .png – sogrady

Trả lời

45

Cập nhật: Tính đến ggplot2 2.2.0, xếp chồng cho giá trị âm được xử lý tự động, mà không cần phải tạo ra các lớp riêng biệt cho các giá trị tích cực và tiêu cực.

Nếu tôi hiểu những gì bạn đang tìm kiếm, các trick là để đưa hai dữ liệu tích cực và tiêu cực trong lớp riêng biệt, và cũng có thể sử dụng stat = "identity":

dat <- read.table(text = " Division Year OperatingIncome 
1 A 2012   11460 
2 B 2012   7431 
3 C 2012   -8121 
4 D 2012   15719 
5 E 2012    364 
6 A 2011   12211 
7 B 2011   6290 
8 C 2011   -2657 
9 D 2011   14657 
10 E 2011   1257 
11 A 2010   12895 
12 B 2010   5381 
13 C 2010   -2408 
14 D 2010   11849 
15 E 2010    517",header = TRUE,sep = "",row.names = 1) 

dat1 <- subset(dat,OperatingIncome >= 0) 
dat2 <- subset(dat,OperatingIncome < 0) 
ggplot() + 
    geom_bar(data = dat1, aes(x=Year, y=OperatingIncome, fill=Division),stat = "identity") + 
    geom_bar(data = dat2, aes(x=Year, y=OperatingIncome, fill=Division),stat = "identity") + 
    scale_fill_brewer(type = "seq", palette = 1) 

enter image description here

+0

Hình như chính xác những gì tôi muốn, cảm ơn! – sogrady

Các vấn đề liên quan