0

非常に具体的な問題に対する答えを探しています。私は彼らのページでggplot2のプロットに関数を重ねる方法を見つけました: http://docs.ggplot2.org/current/stat_function.html

しかし、私の場合、Y 軸に時間を使用するプロットがあります。私のデータは次のとおりです。

dput(flN)
structure(list(eCenter = c(52, 85, 141, 227, 645), eLow = c(42, 
64, 112, 178, 546), eHigh = c(65, 112, 178, 290, 761), arrivalTime = structure(c(957173699, 
957173635, 957173496, 957173418, 957173338), class = c("POSIXct", 
"POSIXt"), tzone = ""), timeError = c(6.436288, 2.075383, 1.321365, 
1.270163, 3.422232), vCenter = c(125839365.727275, 154297213.515671, 
186197068.826928, 216301111.588418, 268912290.324273), vLow = c(114601800.781488, 
137454241.369541, 171493844.86893, 201095521.048661, 262431046.389897
), vHigh = c(138347098.798059, 171493844.86893, 201095521.048661, 
230862999.254391, 274537514.959924)), .Names = c("eCenter", "eLow", 
"eHigh", "arrivalTime", "timeError", "vCenter", "vLow", "vHigh"
), row.names = c("E1'", "E2'", "E3'", "E4'", "FP5'"), class = "data.frame")

次のようになります。

> flN
     eCenter eLow eHigh         arrivalTime timeError   vCenter      vLow     vHigh
E1'       52   42    65 2000-05-01 10:34:59  6.436288 125839366 114601801 138347099
E2'       85   64   112 2000-05-01 10:33:55  2.075383 154297214 137454241 171493845
E3'      141  112   178 2000-05-01 10:31:36  1.321365 186197069 171493845 201095521
E4'      227  178   290 2000-05-01 10:30:18  1.270163 216301112 201095521 230862999
FP5'     645  546   761 2000-05-01 10:28:58  3.422232 268912290 262431046 274537515

そして、他の量は次のとおりです。

m = 574.2538
c = 3E8
y0 = flN$arrivalTime - m*c/flN$vCenter
y01 = y0[1]

そして、私が試したコードは次のとおりです。

#this works and plots a part of what I want:
p <- ggplot(flN, aes(x=c/vCenter, y=arrivalTime)) + geom_point(aes(y=arrivalTime)) + geom_errorbarh(aes(xmin=c/vHigh, xmax=c/vLow)) + xlim(0, 3)  + ylim(as.POSIXct('2000/05/01 10:20'), as.POSIXct('2000/05/01 10:40')) 

# the function I want to plot. It's a simple straight line function
test <- function(x) {y01 +m*x}

# the code to plot this function over my previous plotted data that doesn't work:
p + stat_function(fun = test, colour="#F8766D", linetype="dashed")
> Error: Discrete value supplied to continuous scale

さて、エラーから、問題は Y の時間軸の使用にあるに違いないと思いますが、問題のこの部分をどのように解決すればよいでしょうか?

4

1 に答える 1

2

変数をstat_function()見つけることができず、グローバル環境で定義されていて、何か他のものを計算したり、連続していない値を与えたりするため、エラーが発生するようです。この問題を解決する 1 つの方法は、引数として and を追加してからaddで関数を変更することです。これにより、引数が確実に検出され、正しく使用されるようになります。また、私はあなたの通話から削除しました (少なくとも私にとってはデータ領域外でした)。y01mtest()y01mstat_function()args=c(y01,m)ylim()ggplot()

test <- function(x,y01,m) {y01 +m*x}

p <- ggplot(flN, aes(x=c/vCenter, y=arrivalTime)) + 
     geom_point(aes(y=arrivalTime)) + 
     geom_errorbarh(aes(xmin=c/vHigh, xmax=c/vLow)) + xlim(0, 3)

p + stat_function(fun = test,args=c(y01,m), colour="#F8766D", linetype="dashed")

ここに画像の説明を入力

于 2013-04-11T06:09:11.550 に答える