2015-03-26 11 views
19

Đó là head của khung dữ liệu mà tôi muốn vẽ.Vẽ bằng ggplot2: Lỗi: Giá trị rời rạc được cung cấp cho thang tỷ lệ liên tục

> dput(head(df)) 
structure(list(`10` = c(0, 0, 0, 0, 0, 0), `33.95` = c(0, 0, 
0, 0, 0, 0), `58.66` = c(0, 0, 0, 0, 0, 0), `84.42` = c(0, 0, 
0, 0, 0, 0), `110.21` = c(0, 0, 0, 0, 0, 0), `134.16` = c(0, 
0, 0, 0, 0, 0), `164.69` = c(0, 0, 0, 0, 0, 0), `199.1` = c(0, 
0, 0, 0, 0, 0), `234.35` = c(0, 0, 0, 0, 0, 0), `257.19` = c(0, 
0, 0, 0, 0, 0), `361.84` = c(0, 0, 0, 0, 0, 0), `432.74` = c(0, 
0, 0, 0, 0, 0), `506.34` = c(1, 0, 0, 0, 0, 0), `581.46` = c(0, 
0, 0, 0, 0, 0), `651.71` = c(0, 0, 0, 0, 0, 0), `732.59` = c(0, 
0, 0, 0, 0, 1), `817.56` = c(0, 0, 0, 1, 0, 0), `896.24` = c(0, 
0, 0, 0, 0, 0), `971.77` = c(0, 1, 1, 1, 0, 1), `1038.91` = c(0, 
0, 0, 0, 0, 0), MW = c(3.9, 6.4, 7.4, 8.1, 9, 9.4)), .Names = c("10", 
"33.95", "58.66", "84.42", "110.21", "134.16", "164.69", "199.1", 
"234.35", "257.19", "361.84", "432.74", "506.34", "581.46", "651.71", 
"732.59", "817.56", "896.24", "971.77", "1038.91", "MW"), row.names = c("Merc", 
"Peug", "Fera", "Fiat", "Opel", "Volv" 
), class = "data.frame") 

Đó là đoạn code mà tôi đang sử dụng cho âm mưu:

## Plotting 
meltDF = melt(df, id.vars = 'MW') 
ggplot(meltDF[meltDF$value == 1,]) + geom_point(aes(x = MW, y = variable)) + 
    scale_x_continuous(limits=c(0, 1200), breaks=c(0, 400, 800, 1200)) + 
    scale_y_continuous(limits=c(0, 1200), breaks=c(0, 400, 800, 1200)) 

Và như người cuối cùng lỗi mà tôi nhận được:

Error: Discrete value supplied to continuous scale

Bạn có bất cứ ý tưởng gì sai với mã này? Nó hoạt động tốt cho đến khi tôi cố gắng thay đổi quy mô vì vậy tôi tin rằng lỗi là một nơi nào đó ...

Tôi đã cố gắng tìm ra nếu có ai đó có vấn đề tương tự vì đã có một vài chủ đề như vậy nhưng có vẻ như các vấn đề khác đã được đề cập.

Đó là làm thế nào để vẽ trông giống như trước khi thêm quy mô:

Plot

+4

giá trị y của bạn (variable) là yếu tố, vì vậy bạn không thể sử dụng 'scale_y_continuous'. –

+1

Bất kỳ giải pháp nhanh nào để thay đổi thành số hoặc số được yêu cầu? Cảm ơn! – Rechlay

+1

http://stackoverflow.com/questions/3418128/how-to-convert-a-factor-to-an-integer-numeric-without-a-loss-of-information – Pewi

Trả lời

24

Như đã đề cập trong các ý kiến, không thể có một quy mô liên tục trên biến kiểu factor. Bạn có thể thay đổi factor-numeric như sau, ngay sau khi bạn xác định các biến meltDF.

meltDF$variable=as.numeric(levels(meltDF$variable))[meltDF$variable] 

Sau đó, thực hiện lệnh ggplot

ggplot(meltDF[meltDF$value == 1,]) + geom_point(aes(x = MW, y = variable)) + 
    scale_x_continuous(limits=c(0, 1200), breaks=c(0, 400, 800, 1200)) + 
    scale_y_continuous(limits=c(0, 1200), breaks=c(0, 400, 800, 1200)) 

Và bạn sẽ có biểu đồ của bạn.

Hope this helps

-2

nếu x là số, sau đó thêm scale_x_continuous(); nếu x là ký tự/yếu tố, sau đó thêm scale_x_discrete(). Điều này có thể giải quyết vấn đề của bạn.

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