Как изменить порядок для графиков пирамиды с ggplot2 на порядок набора данных? - PullRequest
1 голос
/ 12 апреля 2020

У меня есть набор данных со значениями климатической пригодности (0-1) для видов деревьев как для настоящего, так и для будущего. Я хотел бы визуализировать данные на графике пирамиды с пакетом ggplot2, в то время как настоящее должно отображаться на левой стороне графика, а будущее на правой стороне и виды деревьев в порядке, указанном в моем наборе необработанных данных.

b2010<-read.csv("csi_before2010_abund_order.csv",header=T,sep = ";")

str(b2010)
'data.frame':   20 obs. of  7 variables:
 $ species: Factor w/ 10 levels "Acer platanoides",..: 9 9 7 7 8 8 6 6 5 5 ...
 $ time   : Factor w/ 2 levels "future","present": 2 1 2 1 2 1 2 1 2 1 ...
 $ grid1  : num  0.6001 0.5945 0.6366 0.0424 0.6941 ...
 $ grid2  : num  0.6399 0.5129 0.6981 0.0399 0.711 ...
 $ grid3  : num  0.6698 0.5212 0.6863 0.0446 0.6795 ...
 $ mean   : num  0.6366 0.5429 0.6737 0.0423 0.6949 ...
 $ group  : Factor w/ 1 level "before 2010": 1 1 1 1 1 1 1 1 1 1 ...

b2010$mean = ifelse(b2010$time == "future", b2010$mean * -1,b2010$mean)
head(b2010)
            species    time      grid1      grid2      grid3        mean       group
1    Tilia europaea present 0.60009009 0.63990200 0.66975713  0.63658307 before 2010
2    Tilia europaea  future 0.59452874 0.51294094 0.52115256 -0.54287408 before 2010
3 Sorbus intermedia present 0.63659602 0.69813931 0.68629903  0.67367812 before 2010
4 Sorbus intermedia  future 0.04242327 0.03990654 0.04460707 -0.04231229 before 2010
5     Tilia cordata present 0.69414478 0.71097034 0.67950863  0.69487458 before 2010
6     Tilia cordata  future 0.55790818 0.53918493 0.51979470 -0.53896260 before 2010

ggplot(b2010, aes(x = factor(species), y = mean, fill = time)) +
  geom_bar(stat = "identity") + 
  facet_share(~time, dir = "h", scales = "free", reverse_num = T) +
  coord_flip()

enter image description here

Теперь, будущее и настоящее находятся в неправильном порядке, а также виды располагаются в алфавитном порядке, хотя они явно "факторы" и, следовательно, должны быть упорядочены в соответствии с моим набор данных. Я был бы очень признателен за вашу помощь. Спасибо и всего наилучшего

1 Ответ

0 голосов
/ 12 апреля 2020

Вы неправильно понимаете, как работают факторы. Бары наносятся в порядке, указанном levels(b2010$species). Чтобы изменить этот порядок, вам придется вручную изменить их порядок, например

b2010$species <- factor(b2010$species, 
                        levels = c("Sorbus intermedia", "Tilia chordata"...))

. Эти уровни, естественно, также могут быть функцией некоторой статистики c, то есть среднего значения. Чтобы сделать это, вы должны сделать что-то вроде

myorder <- b2010[order(b2010$mean) & b2010$time == "present", "species"]
b2010$species <- factor(b2010$species, levels = myorder)
...