2015-04-23 18 views
5

Tôi cần vẽ ba giá trị, để tạo ba thanh cho mỗi giá trị của Trục X. Dữ liệu của tôi là: My dataframe DFCách vẽ nhiều cột trong R cho cùng một Giá trị X-trục

Trong trục X phải là cột được gắn nhãn "m" và cho mỗi giá trị "m" tôi cần để vẽ giá trị "x", "y" và "z".

Tôi muốn sử dụng ggplot2 và tôi cần một cái gì đó như thế này:

Goal

+0

Bạn có thể cung cấp một số dữ liệu có thể tái sản xuất để chứng minh những gì bạn muốn hoàn thành? – cdeterman

+0

Vui lòng bao gồm [ví dụ có thể tái sản xuất] (http://stackoverflow.com/questions/5963269/how-to-make-a-great-r-reproducible-example) với dữ liệu nhập mẫu và hiển thị bất kỳ mã nào bạn đã viết xa. – MrFlick

+0

Xin lỗi, nó đã không được tải lên lúc đầu, tôi có một số vấn đề với các bức ảnh –

Trả lời

6

Tôi tạo ra bộ dữ liệu của riêng tôi để chứng minh làm thế nào để làm điều đó:

dữ liệu:

x <- runif(12,1,1.5) 
y <- runif(12,1,1.5) 
z <- runif(12,1,1.5) 
m <- letters[1:12] 
df <- data.frame(x,y,z,m) 

Giải pháp:

#first of all you need to melt your data.frame 
library(reshape2) 
#when you melt essentially you create only one column with the value 
#and one column with the variable i.e. your x,y,z 
df <- melt(df, id.vars='m') 

#ggplot it. x axis will be m, y will be the value and fill will be 
#essentially your x,y,z 
library(ggplot2) 
ggplot(df, aes(x=m, y=value, fill=variable)) + geom_bar(stat='identity') 

Output:

enter image description here

Nếu bạn muốn các thanh một cạnh khác mà bạn cần phải xác định vị trí dodge tại geom_bar ví dụ:

ggplot(df, aes(x=m, y=value, fill=variable)) + 
     geom_bar(stat='identity', position='dodge') 

enter image description here

+0

Cảm ơn bạn thực sự thực sự nhiều, giải pháp của bạn đã cứu tôi. Bạn có biết cách tránh các giá trị X-Axis để sắp xếp theo thứ tự bảng chữ cái không? –

+0

Bạn được chào đón :) Vui vì tôi có thể giúp đỡ. Có một câu trả lời rất hay [ở đây] (http://stackoverflow.com/questions/3253641/how-to-change-the-order-of-a-discrete-x-scale-in-ggplot) về việc thay đổi thứ tự (câu trả lời thứ hai, không phải là câu trả lời). Bạn cần sử dụng 'scale_x_discrete' với đối số' limits'. – LyzandeR

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