2012-05-26 2 views
1

Привет я получил фрейм данных weekly.mean.values со следующей структурой:Geom_ribbon() как раз получается график пустой

week:mean:ci.lower:ci.upper 

Где неделя является фактором; среднее, ci.lower и ci.upper являются числовыми. На каждую неделю есть только одно среднее и одно ci.lower или ci.upper.

Я пытался построить тенистую площадь внутри 95% доверительного интервала вокруг среднего значения, с помощью следующего кода:

ggplot(weekly.mean.values,aes(x=week,y=mean)) + 
    geom_line() + 
    geom_ribbon(aes(ymin=ci.lower,ymax=ci.upper)) 

Сюжета, однако, вышел пустой (то есть только с x- ось и ось y, но ни строк, ни точек, не говоря уже о заштрихованных областях).

Если я удалил часть geom_ribbon, я получил строку. Я знаю, что это должна быть очень простая задача, но я не знаю, почему я не мог заставить geom_ribbon замышлять то, что я хотел. Любой намек будет по достоинству оценен.

+3

Вы должны предоставить небольшой пример [воспроизводимого] (http://stackoverflow.com/q/5963269/324364), который иллюстрирует это поведение. Нам сложно волноваться о том, что происходит на вашем компьютере. – joran

ответ

0

Возможно, мне что-то не хватает, но по умолчанию будет нанесена лента, заполненная grey20. Вы рисуете этот слой сверху данных, поэтому неудивительно, что он его закрывает. Кроме того, также возможно, что пределы для осей графика, полученные из данных, предоставленных на начальный вызов ggplot(), не будут достаточными, чтобы содержать ленту доверительного интервала. В этом случае я не удивлюсь, увидев серый/пустой сюжет.

Чтобы увидеть, если это проблема, попробуйте изменить geom_ribbon() строку:

geom_ribbon(aes(ymin=ci.lower,ymax=ci.upper), alpha = 0.5) 

который будет сюжет ленты с прозрачностью whic должны показать данные ниже, если проблема в том, что я думаю, что это.

Если это так, задайте пределы x и y для диапазона данных +/- доверительный интервал, который вы хотите построить, и измените порядок слоев (т. Е. Нарисуйте линию поверх ленты) и используйте прозрачность в ленте, чтобы показать сетку через нее.

1

Я понимаю, что эта тема очень стар, но google все еще ее находит.

Ответьте, что вам необходимо установить ymin и ymax, чтобы использовать часть данных, которые вы используете на y-axis. Вы устанавливаете их в скалярные значения, тогда лента покрывает весь участок сверху вниз.

Вы можете использовать

ymin=0 
ymax=mean 

, чтобы перейти от 0 до вашего y-point или даже

ymin=mean-1 
ymax=mean+1 

иметь ленту покрывают полосу, охватывающую фактические данные.

0

От ggplot's docs для geom_ribbon (2.1.0):

Для каждого непрерывного значения х, geom_interval отображает у интервала. geom_area - частный случай geom_ribbon, где минимум диапазона фиксирован на 0.

В этом случае значения x не могут быть факторами для geom_ribbon. Одним из решений было бы преобразование week от коэффициента к числовому. например

ggplot(weekly.mean.values,aes(x=as.numeric(week),y=mean)) + 
    geom_line() + 
    geom_ribbon(aes(ymin=ci.lower,ymax=ci.upper)) 

geom_line должен обрабатывать переход от фактора к числовым без инцидентов, хотя масштаб по оси Х может отображаться по-разному.

Смежные вопросы