2012-04-18 38 views
5

tôi có các dữ liệu sauTạo nhóm thanh-lô dữ liệu nhiều cột trong R

 Input Rtime Rcost Rsolutions Btime Bcost 
1 12 proc.  1 36  614425  40 36 
2 15 proc.  1 51  534037  50 51 
3 18-proc  5 62 1843820  66 66 
4 20-proc  4 68 1645581 104400 73 
5 20-proc(l)  4 64 1658509 14400 65 
6 21-proc 10 78 3923623 453600 82 

Tôi muốn tạo ra một biểu đồ thanh nhóm từ dữ liệu này mà trục x chứa Input lĩnh vực (như các nhóm) và trục y đại diện cho thang đo log cho các trường Rtime và Btime (hai thanh).

Tất cả các giải pháp/ví dụ tôi đã kiểm tra trực tuyến có dữ liệu tương tự được đưa vào bố cục ba cột. Tôi không biết làm thế nào để sử dụng dữ liệu tôi phải tạo ra các biểu đồ thanh nhóm. Hoặc nếu có cách để chuyển đổi dữ liệu này (chuyển đổi theo cách thủ công không phải là tùy chọn vì nó là tệp lớn có nhiều hàng) thành một định dạng dữ liệu tương thích Rggplot tương thích.

Edit:

Graph tạo sử dụng giải pháp

enter image description here

Trả lời

17

Theo yêu cầu, một giải pháp ggplot2:

df <- read.table(text = "  Input Rtime Rcost Rsolutions Btime Bcost 
1 12-proc.  1 36  614425  40 36 
2 15-proc.  1 51  534037  50 51 
3 18-proc  5 62 1843820  66 66 
4 20-proc  4 68 1645581 104400 73 
5 20-proc(l)  4 64 1658509 14400 65 
6 21-proc 10 78 3923623 453600 82",header = TRUE,sep = "") 

dfm <- melt(df[,c('Input','Rtime','Btime')],id.vars = 1) 

ggplot(dfm,aes(x = Input,y = value)) + 
    geom_bar(aes(fill = variable),stat = "identity",position = "dodge") + 
    scale_y_log10() 

enter image description here

Lưu ý sự khác biệt phong cách ở đây, nơi từ log(1) = 0, ggplot2 xử lý mà là một thanh zero chiều cao và doesn' t âm mưu bất cứ điều gì, trong khi barplot âm mưu một chút sơ khai (theo ý kiến ​​của tôi là một chút gây hiểu lầm).

+1

tuyệt vời. Tôi muốn tôi biết điều này trước khi viết kịch bản python ngu ngốc {Python là tốt mặc dù!} Cảm ơn rất nhiều joran – Ankit

+2

Đáng chú ý rằng 'melt' là trong gói' reshape2' – Serenthia

+0

Ngoài ra, cần thêm 'stat =" identity "' vào 'geom_bar' thay vì mặc định là' stat = "bin" ' – Serenthia

5

gncs Tôi nghĩ rằng tôi hiểu được vấn đề và đây là những gì tôi sẽ đề nghị (viết tắt chạy - Tùy chọn):

data <- read.table("data.txt", header=TRUE) 
subset <- t(data.frame(data$Rtime, data$Btime)) 
barplot(subset, legend = c("Rtime", "Btime"), names.arg=data$Input, log="y", beside=TRUE) 

Đó có phải là những gì bạn muốn không? Nó là loại bẩn, nhưng nó thực hiện công việc.

Cập nhật: mã đã được sửa.

+0

Bạn là người đàn ông! Cảm ơn rất nhiều. Ngoài ra, bạn có biết làm thế nào để làm điều này bằng cách sử dụng ggplot? – Ankit

2

câu trả lời Joran đã giúp tôi rất nhiều, nhưng tôi đã phải sử dụng stat = "bản sắc" trong báo cáo ggplot như thế:

ggplot(dfm, aes(x = Input,y = value)) + 
geom_bar(aes(fill = variable), position = "dodge", stat="identity") + 
scale_y_log10() 

phiên bản của tôi về R là 3.2.2 và ggplot2 phiên bản 1.0. 1

Cảm ơn.

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