метки оси X в барплоте и расширение кадра данных - PullRequest
0 голосов
/ 16 января 2019

Мои данные

df <- structure(list(variable = c("main.tmin", "main.tmin", "main.tmin", 
                        "main.tmin", "main.tmin"), 
           coef = c(-23.28653023, 22.98726658, -55.1958095, -30.08524407, 
                    36.22033036), 
           acz = c(101L, 103L, 107L, 113L, 114L)), 
          class = "data.frame", row.names = c(NA, -5L))

library(ggplot2)

ggplot(df, aes(x = acz, y = coef)) + geom_bar(stat = "identity")  

Я хочу сделать две вещи:

Сначала я хочу расширить df, чтобы иметь acz с 101: 114 таким, чтобы для acz которые не имеют никаких значений, имеют в себе NA. Примерно так

final.df <- data.frame(variable = "main.tmin",
                   acz = 101:114, 
                  coef = c(-23.28653, NA, 22.98727, NA, NA, NA, -55.19581, NA, NA, NA, NA, NA, -30.08524, 36.22033))


ggplot(final.df, aes(x = acz, y = coef)) + geom_bar(stat = "identity")

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

1 Ответ

0 голосов
/ 17 января 2019

Чтобы заполнить пропущенный диапазон acz, вы можете использовать функции complete и full_seq из tidyr. По умолчанию они также ставят NA для других столбцов.

library(ggplot2)
library(tidyr)
# Using OPs data
ggplot(complete(df, acz = full_seq(acz, 1)), 
       aes(factor(acz), coef)) + 
    geom_bar(stat = "identity")  

enter image description here


Другое решение заключается в прямом преобразовании меток оси X в дискретный масштаб, передавая пределы диапазона:

ggplot(df, aes(acz, coef)) + 
    geom_bar(stat = "identity") +
    scale_x_discrete(limits = seq(min(df$acz), max(df$acz)))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...