2015-05-20 86 views
0

這可能很簡單,但我無法解決。在R中X軸的數值不被接受爲負值:ggplot

我加載數據集看起來像這樣,但它從-50一直到1500運行:

Name ExpA ExpB -50  -49  -48  -47  -46 -45  -44 
sampleA Light Low  12.326 12.326 12.328 36.979 36.979 24.566 24.652 
SampleB Light High 0.0  9.333 9.3233 37.302 46.628 18.651 18.651 
SampleC Dark Low  0.0  0.0  0.0  13.575 40.725 27.150 0.0 

我對數據進行熔體:

x.melt <-melt(x, id=c("Name","ExpA", "ExpB")) 

x.melt 
    Name ExpA ExpB variable value 
1 SampleA Light Low  -50  12.326402 
2 SampleB Light High -50  0.000000 
3 SampleC Dark Low  -50  14.242440 
4 SampleD Dark High -50  0.000000 
9 SampleA Light Low  -49  12.326402 
10 SampleB Light High -49  9.325700 
11 SampleC Dark Low  -49  0.000000 
12 SampleD Dark High -49  8.792096 
...etc... 

,我想繪製數據。這在x軸以外的各個方面都可以正常工作。如果我在x軸調用中不包含'as.numeric()',那麼它確定我的軸是一個離散變量。我的基本代碼是:

p <- ggplot(data=x.melt, aes(x=as.numeric(variable), y=value, colour=ExpA)) 
p + 
    stat_smooth(method="loess", span=0.05, se=TRUE) 

正如你可以看到,從零開始x軸而不是-50。 ggplot

有沒有辦法正確解釋軸調用的變量列?

+0

可以使用您發佈的初步數據集'dput(mydataset)' – Chris

+1

如果你嘗試'X =會發生什麼as.numeric(as.character(變量))'?爲了擴大我的意思,比較'as.numeric(factor(c(4,2,3,-1)))'和'as.numeric(as.character(factor(c(4,2,3, - 1))))'。 – blakeoft

+0

這工作。我不確定它爲什麼有效,但它工作。如果你把它作爲答案,我會接受它!你的例子向我展示了它爲什麼會以不同的方式來解釋我所期望的,但我仍然不明白爲什麼會發生這種情況 – Daniel

回答

1

我假設列稱爲變量是一個因素。當您將一個因子轉換爲數字時,您告訴R您想要將該值替換爲該因子級別中該值的索引。例如,讓

a <- c(3, -1, 1) 
b <- factor(a) 
b 
# [1] 3 -1 1 
# Levels: -1 1 3 

請注意它是如何對等級進行排序的。因此,當您撥打as.numeric時,它將用1代替-1的任何值,因爲-1是第一級,依此類推。看到這個

as.numeric(b) 
# [1] 3 1 2 

有辦法的一個因素轉換爲數值向量和保存價值。一個有效的方法就是做這個

as.numeric(levels(b))[b] 
# [1] 3 -1 1 

,並解決您的具體問題,請嘗試

p <- ggplot(data=x.melt, aes(x=as.numeric(levels(variable))[variable], y=value, colour=ExpA)) 
p + stat_smooth(method="loess", span=0.05, se=TRUE) 
+0

謝謝,這很好。 – Daniel