Порядок на основе их рангов в Geom_bar (Dodge) - PullRequest
0 голосов
/ 28 октября 2019

Это мои данные:

Guild           Treatment   value
Ins                Low      59.1
InsAerGleEdge      Low      19.7
InsAerOpen         Low      6.7
InsAerGleEdgeClut  Low      4.4
Frug               Low      3.7
InsAerGleClut      Low      3.5
InsAerEdge         Low      2.3
InsGleClut         Low      0.6
InsAerOpen        Medium    40.1
Frug              Medium    24.3
Ins               Medium    24.3
InsAerGleEdge     Medium    5.3
InsAerEdge        Medium    2.6
InsAerGleEdgeClut Medium    2.6
InsGleClut        Medium    0.7
InsAerGleClut     Medium    0
Frug               High     27.8
InsAerEdge         High     18.6
InsAerGleClut      High     16.7
InsAerGleEdge      High     15.5
Ins                High     11.7
InsAerOpen         High     5.8
InsAerGleEdgeClut  High     3.7
InsGleClut         High     0.3

Я хотел бы иметь барплот с использованием ggplot, сохраняющий последовательность гильдий для каждой обработки. Например, в:

  1. Обработка Low последовательность гильдий Ins, InsAerGleEdge, InsAerOpen и т. Д. На основе самого высокого значения.
  2. Обработка "Средняя" - это InsAerOpen, Frug, Ins и т. Д.

Моя проблема заключается в том, что, когда я планирую его во всех обработках, он начинается с одной и той же гильдии.

Я пробовал «переупорядочить», «фактор», но он не меняется для каждого лечения в отдельности.

Treatment<-as.character(df$Treatment)
df$Treatment<-factor(df$Treatment, levels = c("Low", "Medium","High"))

m<-ggplot(df, aes(fill=Guild, y=value, x=Treatment)) + 
  geom_bar(position=position_dodge(), stat="identity",color="grey60")+
  scale_fill_manual(values=c("grey80", "grey30","grey60","grey40","grey50","grey70","grey90","grey20"))

1 Ответ

0 голосов
/ 30 октября 2019

Вот подход, использующий фасеты, назначающий глобальный порядок и затем корректирующий масштаб каждого фасета (scales = "free_x"), чтобы показать только значения, применимые к этому фасету.

df$order = forcats::fct_inorder(paste(df$Treatment, df$Guild))
ggplot(df, aes(fill=Guild, y=value, x=order)) + 
  geom_bar(position=position_dodge(), stat="identity",color="grey60")+
  scale_fill_manual(values=c("grey80", "grey30","grey60","grey40",
                             "grey50","grey70","grey90","grey20")) +
  # scale_x_discrete(labels = NULL) +    # to leave out x labels
  scale_x_discrete(labels = df$Guild, name = "") +
  facet_wrap(~Treatment, scales = "free_x", switch = "x") +  
  # The "switch" part above moves Treatment to the bottom
  theme(axis.text.x = element_text(angle = 90, hjust = 1, vjust = 0.3))

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...