2016-04-14 2 views
3

Я пытаюсь установить линейную регрессию (на самом деле 9 из них) через фигуру с 20 гранями. Каждый раз, когда я приспосабливаю регрессию (используя geom_smooth с помощью метода = lm), он подходит для 20 строк, по одному по каждой гранью, однако мне бы хотелось, чтобы одна строка для каждой комбинации ReefSpecies проходила через все 20 граней.Одна регрессия через множество граней в ggplot

Вот моя фигура:

Similar Figure

Вот то, что я до сих пор:

Biomass <- c(20, 10, 5, 4, 5, 7, 8, 22, 13, 13, 15, 18, 2, 5, 7, 10) 
Season <- c("Winter", "Spring", "Summer", "Fall") 
Year <- c("1", "2", "3", "4") 
ReefSpecies <- c("Admiral Ma", "Jaap Mf", "Grecian Ma", "Alligator Mf", "Jaap Mf", "Grecian Ma", "Alligator Mf", "Admiral Ma", "Grecian Ma", "Alligator Mf", "Admiral Ma", "Jaap Mf", "Alligator Mf", "Admiral Ma", "Jaap Mf","Grecian Ma") 
Seasonal <- data.frame(Biomass, Season, Year, ReefSpecies) 

testp <- ggplot(data = Seasonal, aes(x = Season, y = Biomass, group =  ReefSpecies, fill = ReefSpecies, colour = ReefSpecies)) 
testp <- testp + geom_point(stat = "identity", position="identity", inherit.aes = TRUE) 
testp <- testp + facet_grid(. ~ Year, scales="fixed") 
testp <- testp + theme(axis.text.x = element_text(angle = 90)) 
testp <- testp + theme(panel.margin.x = unit(0, "lines")) 
testp <- testp + theme(legend.position = "top") 
testp 
+0

Пожалуйста сделайте ваш вопрос воспроизводимым. – Andrie

+0

В этом ключе укажите немного данных, чтобы мы могли воспроизвести вашу проблему. – lmo

+0

Материал ggplotGrob и все элементы темы не имеют отношения к вашему вопросу и просто делают сообщение трудным для глаз. Материал внутри 'geom_point()' также не нужен. Я предлагаю, чтобы в любой строке, которую вы используете, чтобы соответствовать регрессии (stat_smooth или что-то?), Вы специально задали эстетику 'group' внутри этого слоя. Обратите внимание, что в вашем первом вызове 'ggplot()' вы устанавливаете группировку и раскраску, которые будут унаследованы всеми остальными слоями, если вы не укажете иное. вы можете добавить что-то вроде '+ geom_smooth (method =" lm ", aes (group = 1))' – Matt74

ответ

1

На основе замечаний, вы не хотите place an identical smooth on each facet of a ggplot (которые вы можете сделать по setting the faceting variable to NULL in the smooth.

Что вы do хочу иметь единую регрессию во всех аспектах. Я думаю, что это невозможно без какого-либо взлома like that shown here. Вы могли бы попробовать это.

Но вместо этого я бы рекомендовал отступить, чтобы рассмотреть, почему вы хотите это сделать и что означает «гладкий». Возможно, это означает, что фасеты не являются правильным выбором? В этом случае вы можете рассмотреть возможность определения переменной Time, которая учитывает сезоны в течение многих лет и регрессирует по этому (без граней).

Пример (с подредактированы данными, потому что ваш пример данные не более чем одно наблюдения за год):

Year <- sort(rep(Year, 4)) 
Seasonal <- data.frame(Biomass, Season, Year, ReefSpecies) 
Seasonal$Time <- interaction(Season, Year) 

ggplot(Seasonal, aes(Time, Biomass, color=ReefSpecies)) + 
    geom_point() + 
    geom_smooth(aes(group=ReefSpecies), method="lm") 

enter image description here

+0

Извините за плохую формулировку. В вашей фигуре мне понадобится 4 линии регрессии, по одной для каждой комбинации ReefSpecies, которая пересечет 4 грани – Danib90

+0

@aosmith. Первая ссылка, похоже, является тем, что я хочу, но я бы фибринг, если бы я сказал вам, что знаю, что происходит в этом код. – Danib90

+0

Хорошо, первая ссылка с комментария @aosmith на вопрос? То есть, http://stackoverflow.com/questions/31690007/ggplot-drawing-line-between-points-across-facets/31691313#31691313 – jaimedash

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