Сгруппированный Barplot (Ml Accuracies) Уменьшение размера / отступа между группами и границами - PullRequest
0 голосов
/ 21 апреля 2020

ниже воспроизводимого примера моего сгруппированного гистограммы. Я борюсь с пробелами между группами. Я уже нашел какой-то вопрос по stackoverflow, как this и здесь .
Я также играл с аргументом geom_bar(position= .., равным "dodge" или dodge_position(0.5), а также с шириной моих баров. Однако я больше не хочу увеличивать ширину своих баров. Есть ли какое-либо решение, например, изменение размера дискретной оси х, чтобы уменьшить помеченные пробелы на рисунке 1? Обновление: Уменьшен код, чтобы сделать его более минимальным для минимального воспроизводимого примера. Проблема осталась прежней

library(ggplot2)
library(ggthemes)
library(dplyr)

algorithm <- c(rep("0_DT",2),rep("1_RF",2),rep("2_MLP",2))
target <- rep(c("Some Data","Some Other Data"),3)
value <- runif(6,85,95) # Simulated Accuracies
CI_lower  <- value - 5
CI_upper  <- value + 5
data <- data.frame(target,algorithm,value,CI_lower,CI_upper)
ggplot(data, aes(fill=algorithm, y=value, x=target)) +
  geom_bar(position=position_dodge(0.75), stat="identity",  width = 0.65)+ theme_classic()+
  scale_fill_manual("Algorithm",
                    values = alpha(c("0_DT" = "#20639B", "1_RF" = "#3CAEA3", "2_MLP" = "#F6D55C"),0.8),
                    labels=c("DT","RF","MLP"))+
  scale_y_continuous("Accuracy in %",limits = c(0,100),oob = rescale_none,
                     # breaks= sort(c(seq(0,90,10),h)),
                     breaks= seq(0,100,10),
                     expand = c(0,0)) 

А вот мой график Рисунок 1

enter image description here

1 Ответ

2 голосов
/ 21 апреля 2020

Возможно, я вас неправильно понимаю, но вы сможете получить желаемый результат, настроив аргумент position:

ggplot(data, aes(fill = algorithm, y = value, x = target)) +
  geom_bar(position = position_dodge(1), stat = "identity",  width = 0.65) + 
  theme_classic() +
  scale_fill_manual("Algorithm", 
                    values = alpha(c("0_DT"  = "#20639B", 
                                     "1_RF"  = "#3CAEA3", 
                                     "2_MLP" = "#F6D55C"), 0.8),
                    labels = c("DT", "RF", "MLP")) +
  scale_y_continuous("Accuracy in %",limits = c(0, 100), oob = rescale_none,
                     breaks= seq(0, 100, 10),
                     expand = c(0, 0)) 

enter image description here

Если вы хотите сохранить видимую ширину столбцов, но также уменьшить расстояние между столбцами, вам придется увеличить ширину, но изменить форму всего графика, изменив размеры окна или поля графика:

ggplot(data, aes(fill = algorithm, y = value, x = target)) +
  geom_bar(position = position_dodge(1), stat = "identity",  width = 0.8) + 
  theme_classic() +
  scale_fill_manual("Algorithm", 
                    values = alpha(c("0_DT"  = "#20639B", 
                                     "1_RF"  = "#3CAEA3", 
                                     "2_MLP" = "#F6D55C"), 0.8),
                    labels = c("DT", "RF", "MLP")) +
  scale_y_continuous("Accuracy in %",limits = c(0, 100), oob = rescale_none,
                     breaks= seq(0, 100, 10),
                     expand = c(0, 0)) +
 theme(plot.margin = unit(c(10, 50, 10, 50), "points"))

enter image description here

Это может быть не совсем то, что вы хотите, но некоторая комбинация position_dodge, width и plot.margin даст вам интервал, который вы ищете.


РЕДАКТИРОВАТЬ

Следуя комментариям ОП, похоже, что окончательное решение должно выглядеть примерно так, что делается с помощью width = 0.9, position_dodge(0.9) и plot.margin = unit(c(10, 50, 10, 50), "points")):

enter image description here

...