ggplot2 - ошибка geom_ribbon? - PullRequest
       12

ggplot2 - ошибка geom_ribbon?

2 голосов
/ 22 апреля 2011

Этот код выдает ошибку, и я не могу понять, почему ...

library( plyr )
library( ggplot2 )
library( grid )
library( proto )

# the master dataframe
myDF = structure(list(Agg52WkPrceRange = c(2L, 2L, 2L, 2L, 2L, 2L, 3L, 
5L, 3L, 5L, 3L, 5L, 3L, 2L, 3L, 3L, 3L, 3L, 2L, 2L, 2L, 2L, 2L, 
3L, 3L, 3L, 3L, 3L, 2L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 
3L, 3L, 3L, 4L, 3L, 4L, 3L, 4L, 4L, 4L, 4L), OfResidualPntReturn52CWk = c(0.201477324, 
0.22350293, 0.248388728, 0.173871456, 0.201090654, 0.170666183, 
0.18681883, 0.178840521, 0.159744891, 0.129811042, 0.13209741, 
0.114989407, 0.128347625, 0.100945992, 0.057017002, 0.081123718, 
0.018900252, 0.021784814, 0.081931816, 0.059067844, 0.095879746, 
0.038977508, 0.078895248, 0.051344317, 0.077515295, 0.011776214, 
0.099216033, 0.054714439, 0.022879951, -0.079558277, -0.050889584, 
-0.006934821, -0.003407085, 0.032545474, -0.003387139, 0.030418511, 
0.053942523, 0.051398537, 0.073482355, 0.087963039, 0.079555591, 
-0.040490418, -0.130754663, -0.125826649, -0.141766316, -0.150708718, 
-0.171906882, -0.174623614, -0.212945405, -0.174480554), IndependentVariableBinned = structure(c(1L, 
1L, 1L, 1L, 1L, 2L, 3L, 10L, 3L, 10L, 4L, 10L, 4L, 2L, 4L, 4L, 
4L, 5L, 2L, 2L, 2L, 3L, 3L, 5L, 5L, 5L, 5L, 6L, 3L, 6L, 6L, 6L, 
6L, 7L, 7L, 7L, 7L, 7L, 8L, 8L, 8L, 8L, 9L, 8L, 9L, 9L, 9L, 9L, 
10L, 10L), .Label = c("1", "2", "3", "4", "5", "6", "7", "8", 
"9", "10"), class = "factor")), .Names = c("Agg52WkPrceRange", 
"OfResidualPntReturn52CWk", "IndependentVariableBinned"), row.names = 28653:28702, class = "data.frame")

# secondary data frame
meansByIndependentVariableBin = ddply( myDF , .( IndependentVariableBinned ) , function( df ) mean( df[[ "OfResidualPntReturn52CWk" ]] ) )

# construct the plot
thePlot = ggplot( myDF , aes_string( x = "IndependentVariableBinned" , y = "OfResidualPntReturn52CWk" ) )
thePlot = thePlot + geom_point( data = meansByIndependentVariableBin , aes( x = IndependentVariableBinned , y = V1 ) )
thePlot = thePlot + geom_line( data = meansByIndependentVariableBin , aes( x = IndependentVariableBinned , y = V1 , group = 1 )  )
thePlot = thePlot + geom_ribbon( data = meansByIndependentVariableBin , aes( group = 1 ,  x = IndependentVariableBinned , ymin = V1 - 1 , ymax = V1 + 1 ) )

# print - error!
print( thePlot )

Я пробовал с / без group = 1.Ошибка:

Error in eval(expr, envir, enclos) : 
  object 'OfRelStrength52CWk' not found

но не уверен, насколько это важно ??Должно быть, я упускаю что-то очевидное.Уберите последний геом (ленту), и он наметится очень хорошо!

Ответы [ 2 ]

12 голосов
/ 22 апреля 2011

В geom_ribbon нет ошибки.Ваша ошибка в том, что вы определяете y = OfResidualPntReturn52CWk в своем вызове ggplot, в результате чего geom_ribbon ищет его.Поскольку вы передаете другой фрейм данных в geom_ribbon, возникает путаница и, следовательно, ошибка.Из вашего вызова печати, хотя вы используете y = OfResidualPntReturn52CWk в вызове ggplot, нет слоя, где вы вызываете его, и, следовательно, он не имеет значения для графика.

Вот как это сделать правильно (если я понимаю, что вы собираетесь делать на этом графике)

MIVB    = meansByIndependentVariableBin
thePlot = ggplot(myDF , aes(x = IndependentVariableBinned)) +
  geom_point(aes(y = OfResidualPntReturn52CWk)) +
  geom_point(data = MIVB, aes(y = V1), colour = 'red') + 
  geom_line(data = MIVB , aes(y = V1, group = 1), colour = 'red') +
  geom_ribbon(data = MIVB, aes(group = 1, ymin = V1 - 1 , ymax = V1 + 1), 
     alpha = 0.2)

Вот вывод, который он производит enter image description here

Вот еще один способ сделать это, не рассчитывая средства заранее.Также я использовал стандартные + - средние ошибки на ленте, так как я нахожу выбор + - 1 произвольным

myDF$IndependentVariableBinned = as.numeric(myDF$IndependentVariableBinned)
thePlot = ggplot(myDF , aes(x = IndependentVariableBinned, y = 
   OfResidualPntReturn52CWk)) +
   geom_point() +
   geom_point(stat = 'summary', fun.y = 'mean', colour = 'red') + 
   geom_line(stat = 'summary', fun.y = 'mean', colour = 'red') +
   geom_ribbon(stat = 'summary', fun.data = 'mean_se', alpha = 0.2)

Это приводит к enter image description here

3 голосов
/ 22 апреля 2011

@ Рамнат на месте. Ваш первоначальный вызов ggplot не нужен, так как все слои, которые вы строите, взяты из суммарного data.frame, сделанного ddply(). Вы также можете упростить свой вызов до ddply(), используя функцию summarize:

meansByIndependentVariableBin2 = ddply( myDF , .( IndependentVariableBinned ) 
, summarize, means = mean(OfResidualPntReturn52CWk) )

Я бы тогда построил ваш график так:

ggplot(meansByIndependentVariableBin2, aes(x = as.numeric(IndependentVariableBinned), y = means)) +
  geom_ribbon(aes(ymin = (means - 1), ymax = (means + 1)), alpha = .4) + 
  geom_point() + 
  geom_line()

Это то, что вы имели в виду? Я добавил альфа в слой ленты, чтобы мы могли четко видеть линии и точки.

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...