position = "dodge" не уклоняется - PullRequest
0 голосов
/ 01 марта 2019

Я работаю над построением двух гистограмм в R, где у меня есть доверительные интервалы для одного из баров, и я сталкиваюсь с проблемой, что position = "dodge" или position = position_dodge () вообще не сдвигают бары,Я просмотрел похожие вопросы по stackoverflow, но, похоже, они не дотягивают.

Мой код:

ggplot(data = Estimates.df, aes(x = Assets, y = Estimate, group = Estimate)) +
  geom_bar(data = Estimates.df, aes(x = Assets, y = Estimate, group = Estimate, fill = Estimate), stat = "identity", fill = "Blue", position = "dodge") +
  geom_bar(data = Estimates.df, aes(x = Assets, y = Target, group = Target, fill = Target), stat = "identity", fill = "Black", position = "dodge") +
  coord_flip() +
  geom_errorbar(aes(ymin = (Estimate - 1.645*Std..Error), ymax = (Estimate + 1.645*Std..Error), group = Estimate), position = "dodge")

Мне нужны доверительные интервалы на графике оценки, но не на целевом графике.Я пытался преобразовать фрейм данных в long с помощью расплавления, но не смог сохранить доверительные интервалы таким образом.

Кто-нибудь может увидеть, где я ошибся?

Мои данные:

Assets <- c("TW", "Asset1", "Asset2", "Asset3", "Asset4", "Asset5", "Asset6", "Asset7", "Asset8", "Asset9", "Asset10", "Asset11", "Asset12", "Asset13", "Asset14", "Asset15", "Asset16")
Std..Error <- c(.0002,.050,.0147,.028,.0289,.035,.0184,.0709,.0130,.0356,.0071,.0067,.0080,.0162,.0188,.0099,.0147)
Estimate <- c(.002,-0.032,.0317,.018,.0336,.0426,.09774,.3191,.0067,.0892,.0225,-0.0145,.0263,.01125,.07359,.09055,.1843)
Target <- c(0,.05,0,.04,0,0,.07,.23,0,.18,.05,0,.02,0,.09,.05,.22)

Estimates.df <- data.frame(cbind(Assets, Std..Error, Estimate, Target))

enter image description here

Ответы [ 2 ]

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

Вам нужно будет использовать длинные данные.Я использую melt, чтобы сделать это, и немного поэкспериментирую с результатом, прежде чем строить график, чтобы вы не получали полос ошибки для Target, как вы сказали.Также я предпочитаю создавать ymin и ymax раньше.Ниже я верю, что вы просите, кроме раскраски.

library(reshape2)
Estimates.df <- data.frame("Assets" = c("TW", "Asset1", "Asset2", "Asset3", "Asset4", "Asset5", "Asset6", "Asset7", "Asset8", "Asset9", "Asset10", "Asset11", "Asset12", "Asset13", "Asset14", "Asset15", "Asset16"),
                           "Std..Error" = c(.0002,.050,.0147,.028,.0289,.035,.0184,.0709,.0130,.0356,.0071,.0067,.0080,.0162,.0188,.0099,.0147),
                           "Estimate" = c(.002,-0.032,.0317,.018,.0336,.0426,.09774,.3191,.0067,.0892,.0225,-0.0145,.0263,.01125,.07359,.09055,.1843),
                           "Target" = c(0,.05,0,.04,0,0,.07,.23,0,.18,.05,0,.02,0,.09,.05,.22))

Estimates.df.p <- Estimates.df %>% 
  mutate(ymin = Estimate - 1.645*Std..Error, ymax = Estimate + 1.645*Std..Error) %>% 
  melt(id.vars = c("Assets", "ymin", "ymax", "Std..Error"), value.name = "value", variable.name = "variable") %>% 
  mutate(ymin = ifelse(variable == "Target", NA, ymin),
         ymax = ifelse(variable == "Target", NA, ymax))


ggplot(data = Estimates.df.p, aes(x = Assets, y = value, group = variable)) +
  geom_bar(aes(fill = variable, colour = variable), stat = "identity", position = "dodge") +
  coord_flip() +
  geom_errorbar(aes(ymin = ymin, ymax = ymax, group = variable), position = "dodge")
0 голосов
/ 01 марта 2019

В вашем коде есть несколько ошибок, вам нужны ваши данные в длинном формате для ggplot2 (не для широкого формата), поэтому я использую набор с tidyr и dplyr для преобразования в длинный формат.Тогда вам не следует повторять эстетику в каждом аргументе ggplot.Наконец, вам нужно убедиться, что ваши значения имеют тип numeric, потому что они имеют тип factor.

Estimates.df <- data.frame(cbind(Assets, Std..Error, Estimate, Target))
library(tidyr)
library(dplyr)
Estimates.df<-Estimates.df %>%
  gather(type,value,Estimate:Target)


ggplot(data = Estimates.df, aes(x = Assets, y = value, fill=type, color=type)) +
  geom_bar(stat = "identity",
           position = "dodge")+
  coord_flip() +
  geom_errorbar(
    aes(ymin = (as.numeric(value) - 1.645*as.numeric(Std..Error)),
        ymax = (as.numeric(value) + 1.645*as.numeric(Std..Error))),
    position = "dodge")

enter image description here

...