facet_zoom увеличивает различные значения оси X
Используя это
ДАННЫЕ
df <- read.table(text = c("
Site measured simulated
site1 9.1 6.8
site2 163.1 128.1
site3 126 75.9
site4 741.2 843
site5 2215.1 1937.7
site6 283.6 423.4
site7 115.6 92.5
site8 12.1 15.3
site9 13.4 15.8
site10 475.7 296.1
site11 1 1.4
site12 84.5 131.9
site13 74.1 43.9
site14 19.2 33.3
site15 74.8 41.1
site16 287.8 366.9"), header =T)
и сценарий ниже
library(tidyr)
library(dplyr)
library(ggplot2)
library(ggforce)
df_reorder <- transform(df,
Site_reorder = reorder(Site, -measured))
df_long <- df_reorder %>% gather("id", "value", 2:3)
ggplot(df_long, aes(x = Site_reorder, y = value, fill = id))+
geom_bar(stat = "identity", position = "dodge", width = 0.7)+
scale_fill_manual(values=c("red", "black")) +
theme_bw()+
facet_zoom(x = Site_reorder%in%c("site14", "site9", "site8", "site1", "site11"))+
labs(x = "", y = " ")+
theme(legend.position = c(0.90, 0.90), legend.background = element_rect(fill="transparent"),
legend.title = element_blank(), axis.text.x=element_text(angle=55, vjust=1, hjust=1,size = 8))
Я хотел, чтобы увеличение было для последних пяти сайтов (site14
, site9
, site8
, site1
а также site11
). Вместо этого он увеличился в первые пять сайтов (site5
, site4
, site10
, site16
, а также site6
)
Будут оценены какие-либо предложения, как сделать увеличение для последних пяти сайтов?
1 ответ
Решение
ggforce
только масштаб в непрерывном масштабе.
1- Вы можете использовать as.numeric
преобразовать уровни в числовые,
2- затем используйте scale_x_continous
печатать названия сайтов
ggplot(df_long, aes(x = as.numeric(Site_reorder), y = value, fill = id))+
geom_bar(stat = "identity", position = "dodge", width = 0.7)+
scale_fill_manual(values=c("red", "black")) +
theme_bw()+
facet_zoom(xy = Site_reorder%in%c("site14", "site9", "site8", "site1", "site11"), horizontal=FALSE) +
scale_x_continuous(
breaks = 1:length(levels(df_long$Site_reorder)),
label = levels(df_long$Site_reorder)
)+
labs(x = "", y = " ")+
theme(legend.position = c(0.90, 0.90), legend.background = element_rect(fill="transparent"),
legend.title = element_blank(), axis.text.x=element_text(angle=55, vjust=1, hjust=1,size = 8))
Вся заслуга принадлежит @HubertL, поскольку это полностью основано на его решении. Я сделал его намного более минималистичным, чтобы было легче следовать
df_reorder <- transform(df, Site_reorder = reorder(Site, -measured))
df_long <- df_reorder %>% gather("id", "value", 2:3)
b <- df_long %>%
filter(id == "measured") %>%
select(-Site, -id) %>% as.tibble()
# b is just a minimal version of df_long
b
b %>%
ggplot(aes(x = as.numeric(Site_reorder), y = value)) +
geom_bar(stat = "identity", width = 0.7) +
facet_zoom(xy = Site_reorder %in% c("site14", "site9", "site8", "site1", "site11"), horizontal=FALSE) +
scale_x_continuous(
breaks = 1:length(levels(df_long$Site_reorder)),
label = levels(df_long$Site_reorder)
)