2015-08-14 6 views
2

Итак, у меня есть график t-dist, созданный в R с использованием кривой и добавление на него многоугольников. Это дает мне базовый сюжет.Как получить фоновое заполнение графика в R

Что мне нужно, это более хороший смотреть участок, где

  • оси Х начинается от -6
  • Y-ось начинается от 0
  • Фон участка (за исключением под кривой) является заполненный каким-то цветом, который мне нужен

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

Вот мой код

curve(dt(x, df = 7), from = -6, to = 6) 
x <- seq(-1.96, -6, len = 100) 
y <- dt(x, 7) 
x1 <- seq(1.96, 6, len = 100) 
y1 <- dt(x1, 7) 

polygon(c(x1[1], x1, x1[100]), c(dt(-6, 7), y1, dt(6, 7)), 
     col = "#b14025", border = "black") 

polygon(c(x[1], x, x[100]), c(dt(-6, 7), y, dt(6, 7)), 
     col = "#b14025", border = "black") 

Первое изображение является выходной ток

Второе изображение является то, что я думаю, что это должно выглядеть

"Here is the current output"

"Here is what I think it should look like"

+0

с 'пар (BG = 'синий')' вы можете полностью изменить фон. Наверное, нет других способов со стандартными графами. Но есть способы использования, например, пакета 'ggplot2'. – drmariod

+0

О, извините, я забыл упомянуть. Я хотел получить ответ, основанный только на ggplot2, поэтому я добавил его среди тегов –

+0

О, тогда это легко ... 'theme (panel.background = element_rect (fill =" black "))' – drmariod

ответ

1

Вот один из способов получения аналогичный результат, используя ggplot2 пакет:

library(ggplot2) 
dt_tails <- function(x){ 
y <- dt(x,7) 
y[abs(x) < 1.96] <- NA 
return(y) 
} 
dt_7 <- function(x) dt(x,7) 
p <- ggplot(data.frame(x=c(-6,6)),aes(x=x)) + 
     stat_function(fun=dt_7, geom="area", fill="white", colour="black") 
p <- p + stat_function(fun=dt_tails, geom="area", fill='#b14025') 
p <- p + theme(panel.grid.major=element_blank(), 
       panel.grid.minor=element_blank(), 
       panel.background=element_rect(fill="#eae9c8")) 
plot(p) 

enter image description here

+0

Спасибо тонну !! ggplot дает эстетически выглядящие сюжеты, btw x и y axes arent выровнены. Я пробовал использовать xaxs и yaxs, он не работает. Просто ответьте на это, плохо используйте это вместо моего –

+0

Вы правы, есть смещение, и я не уверен, как его удалить. Конечно, можно поставить горизонтальную линию при y = 0 и вертикальную в x = -6, но она выглядит не очень хорошо. Я продолжаю пытаться и дам вам знать, найду ли я решение. – RHertel

+1

Снова Thanx тонна !! upvote на данный момент! –

0

Поскольку вы ожидаете d a ggplot ответьте, просто добавьте + theme(panel.background = element_rect(fill = "yellow")) к вашему сюжету или тому, что вам нравится.

+0

Можете ли вы редактировать, чтобы включить код от начала? Как в кривых и сюжетах работает с ggplot? Я никогда не использовал ggplot2 до –

+0

Возможно, вы можете адаптироваться, используя следующую [ссылку] (http: // stackoverflow.com/questions/12429333/how-to-shade-a-region-under-a-curve-using-ggplot2) – drmariod

+0

Тема заполняет всю область печати. Я не хочу, чтобы цвет был заполнен под кривой, кроме заштрихованной области. Посмотрите на ожидаемое изображение с изображением, прикрепленное выше –

0

Мне удалось сделать это только с базовыми функциями построения графика.

  • Для затенения области за пределами кривой: я просто добавил еще один многоугольник, прослеживающий область за пределами кривой.

  • Для фиксации график, чтобы начать с требуемой X и Y, я использовал другой параметр функции участка xaxs & yaxs этого Link

Вот мой прилагается код

curve(dt(x, df = 7), from = -6, to = 6,xaxs="i",yaxs="i",ylim=c(0,0.4)) 

t = seq(-6,6,len = 100) 
yt = dt(t,7) 

x <- seq(-1.96, -6, len = 100) 
y <- dt(x, 7) 
x1 <- seq(1.96, 6, len = 100) 
y1 <- dt(x1, 7) 

polygon(x = c(-6,-6,t,6,6), 
     y = c(0.4,0,yt,0,0.4), 
     col = "#eae9c8", 
     border = "black") 


polygon(x = c(x1[1], x1, x1[100]), 
     y = c(dt(-6, 7), y1, dt(6, 7)), 
     col = "#b14025", 
     border = "black") 

polygon(x = c(x[1], x, x[100]), 
     y = c(dt(-6, 7), y, dt(6, 7)), 
     col = "#b14025", 
     border = "black") 

Вот прилагаемый вывод Final Output

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