R: промежутки между указанными c барами в ggplot - PullRequest
1 голос
/ 17 января 2020

У меня есть эта гистограмма.

enter image description here

Я создаю график с этим кодом:

# Speedup Graph
  p <- ggplot(speedup_df, aes(x= benchmark, y = speedup, fill = factor(technique))) +
    geom_bar(stat = "identity", position = "dodge", width = 0.7) +
    scale_fill_discrete(name="Technique", labels=c("No Compression", "Compression Perfect", "Compression BDI", "Precompression BDI Hash",
                                               "Precompression BDI Similarity", "Compression CPack", "Precompression CPack Hash",
                                               "Precompression CPack Similarity", "Compression FPCD", "Precompression FPCD Hash",
                                               "Precompression FPCD Similarity")) +
    labs(title = plot_name, y="Speedup", x="Benchmarks") +
    coord_cartesian(ylim=c(min(speedup_df$speedup), max(speedup_df$speedup))) +
    theme(axis.text.x = element_text(angle=45, size=10, hjust=1)) +
    geom_text(data=speedup_df, aes(label=sprintf("%0.4f", round(speedup, digits = 4)), fontface = "bold"), size = 5, position=position_dodge(width=0.7), 
                               hjust=0.5, vjust=-0.7)

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

1 Ответ

1 голос
/ 17 января 2020

Если вы предоставите воспроизводимый пример, я могу проверить его на моей стороне. Идея состоит в том, чтобы изменить width в geom_bar и width в position_dodge(). Вам может потребоваться изменить значения в следующем примере, используя данные mtcars.

library(ggplot2)

# without space
ggplot(mtcars, aes(x= 1, y = mpg, fill = factor(cyl))) +
  geom_bar(stat = "identity", position= "dodge", width = 0.7) 


# add space
ggplot(mtcars, aes(x= 1, y = mpg, fill = factor(cyl))) +
  geom_bar(stat = "identity", position = position_dodge(width=0.9), width = 0.7) 

Создано в 2020-01-17 пакетом Представлять (v0.3.0)

Редактировать

Существует несколько способов вставить разрыв между указанными c барами. Интуитивно понятным способом является использование add_row() для нескольких пустых строк и повторная установка levels:

library(tidyverse)
df <- data.frame(x = c("a", "b", "c", "d", "e"), 
                 y = c(1, 2, 5, 6, 3))

df <- add_row(df, x = c(" ", "  "), y = c(NA))
df$x <- factor(df$x, levels = c("a", " ", "b", "c", "d", "  ", "e")) 

ggplot(df, aes(x= x, y = y, fill = x)) +
    geom_bar(stat = "identity", na.rm = TRUE, 
             position = "dodge", width = 1) +
     scale_fill_manual(values=c("red", "white", "green","blue","maroon", 
                             "white","navy"))

Создано в 2020-01-18 Представить пакет (v0.3.0)

...