Как упорядочить одну переменную относительно другой при построении фасетной сетки? - PullRequest
0 голосов
/ 30 марта 2019

У меня есть столбец данных «location», который является фактором с 8 уровнями («site01», «site02», «site03», «site04» ..... «site08»), каждый из которых имеет широту и долгота как два других столбца в кадре данных.

Мне нужно сделать фацетную сетку и упорядочить сайты в соответствии с широтами сайтов.

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

library(scales)
library(ggplot2)
sp <- ggplot(df, aes(x=year, y=value, col=coralType)) + geom_point(stat="identity") + facet_grid(location ~ coralType) + 
  theme(strip.text.x = element_text(size=8),
          strip.text.y = element_text(size=8, face="bold", angle = 0),
          strip.background = element_rect(colour="red", fill="#CCCCFF")) + 
  scale_x_continuous(name="Year", breaks=c(2010, 2013, 2016)) + 
  scale_y_continuous(name="Bleaching Percentage", breaks=seq(0,1,0.5), labels=percent)+
  geom_smooth(method="lm")
sp

Это создает графики, но они не упорядочены в соответствии с широтой участка.

1 Ответ

0 голосов
/ 30 марта 2019

@ saksham-nagpal, В отсутствие минимального воспроизводимого примера я создал несколько фиктивных данных и нанес их на график.Дайте мне знать, если это работает.

# create some dummy data
corals<- c("red","blue","green")
df<- data.frame(siteLoc=paste0(("siteLoc"),1:6,rep("",6)),
                lat=runif(6), long=c(-2, -1, 0, 1, 2, 5),
                coralType = rep(corals,6)
                )

df$mc <- cut(df$long, c(-Inf, 0, 1, Inf), c('level 1', 'level 2', 'level 3'))

# plot the data
library(ggplot2)
plt <- ggplot(df, aes(lat,long, colour = mc)) + geom_point(stat="identity") 
plt + facet_grid(coralType ~ mc, scales="free")
sp<-plt + facet_grid(coralType ~ mc, scales="free_y")+
  theme(strip.text.x = element_text(size=8),
        strip.text.y = element_text(size=8, face="bold", angle = 0),
        strip.background = element_rect(colour="red", fill="#CCCCFF"))+
  scale_x_continuous(name="Year", breaks=c(2010, 2013, 2016)) + 
  scale_y_continuous(name="Bleaching Percentage", breaks=seq(0,1,0.5))+
  geom_smooth(method="lm")
sp

plt1

Теперь, если вы посмотрите на переменные coralType уровни, например levels(df$coralType).Это покажет как, [1] "blue" "green" "red".Предполагая, что вы хотите, чтобы уровни были переупорядочены, как, [1] "red" "blue" "green".В этом случае вам нужно изменить порядок уровней факторов следующим образом:

# reorder the factors
df$reordrFactor<- factor(df$coralType, levels = c("red","blue","green"))
levels(df$reordrFactor)
[1] "red"   "blue"  "green"

Так что теперь, если вы построите график, вы получите желаемый результат.

# plot according to reordered factor levels
plt <- ggplot(df, aes(lat,long, colour = mc)) + geom_point(stat="identity") 
plt + facet_grid(reordrFactor ~ mc, scales="free")
sp<-plt + facet_grid(reordrFactor ~ mc, scales="free_y")+
  theme(strip.text.x = element_text(size=8),
        strip.text.y = element_text(size=8, face="bold", angle = 0),
        strip.background = element_rect(colour="red", fill="#CCCCFF"))+
  scale_x_continuous(name="Year", breaks=c(2010, 2013, 2016)) + 
  scale_y_continuous(name="Bleaching Percentage", breaks=seq(0,1,0.5))+
  geom_smooth(method="lm")
sp

plt2

Надеюсь, это поможет.

...