В искусственных данных, которые я создал для MWE ниже, я попытался продемонстрировать суть script, который я создал в R. Как видно из графика, который получается из этого кода, на одном из моих условия У меня нет значения "Нет" для завершения серии.
Мне сказали, что если я не смогу сделать этот последний столбец, у которого, к сожалению, нет лишней серии, такой же тонкой, как в столбцах, где на графике мне не разрешат использовать эти графики. Это печально проблема, потому что написанный мной script производит сотни графиков одновременно, в комплекте со статистикой, индикаторами значимости, предустановленными барами ошибок и интеллектуальными настройками оси Y (эти функции, конечно же, отсутствуют в MWE).
Несколько других комментариев:
-
Этот столбец исключений не гарантируется в конце графика... поэтому ручная настройка, чтобы заставить серию изменить цвет и инвертировать порядок, оставляя лишнее пространство с правой стороны, не является надежным.
-
Я попытался имитировать данные как константу 0, так что серия "присутствует", но невидима, но, как и следовало ожидать, порядок серий c (No, Yes) делает этот пробел пробелом что также неприемлемо. Вот как на этот же вопрос был дан ответ, но, к сожалению, это не работает для меня с моими ограничениями: Согласованная ширина для geom_bar в случае отсутствия данных и Включить пробел для недостающего уровня фактора, используемого при заполнении эстетики в geom_boxplot
-
Я также попытался сделать это с помощью граней, но возникли многочисленные проблемы, включая разрывы строк и ошибки в аннотации, которые я добавляю к оси X.
MWE:
library(ggplot2)
print("Program started")
x <- c("1","2","3","1","2","3","4")
s <- c("No","No","No","Yes","Yes","Yes","Yes")
y <- c(1,2,3,2,3,4,5)
df <- as.data.frame(cbind(x,s,y))
print(df)
gg <- ggplot(data = df, aes_string(x="x", y="y", weight="y", ymin=paste0("y"), ymax=paste0("y"), fill="s"));
dodge_str <- position_dodge(width = NULL, height = NULL);
gg <- gg + geom_bar(position=dodge_str, stat="identity", size=.3, colour = "black")
print(gg)
print("Program complete - a graph should be visible.")