2017-01-27 2 views
0

Я использую ggplot в Rstudio, чтобы попытаться создать штрих-код, показывающий количество индикаторов, когда ветер приходит с определенного направления.r ggplot добавление ярлыков категории факторов

Мои данные не включают в себя ветер, идущий со всех сторон (категории «N», «NE», «E», «SE», «S», «SW», «W», «NW»). Как таковые мои сюжеты выглядят странно, поскольку они пропускают определенные направления ветра.

Есть ли способ добавить в категории классы и заставить их появляться на графике?

Update: Подмножество моих данных с использованием dput является:

structure(list(Sum.of.Incidents = c(1L, 2L, 2L, 0L, 1L, 0L, 0L, 
2L, 2L, 0L, 1L, 0L, 0L, 0L, 1L, 0L, 0L, 0L, 0L, 5L, 0L, 4L, 1L, 
1L, 0L, 0L, 0L, 0L), WindDirCompass = structure(c(2L, 2L, 7L, 
8L, 6L, 5L, 2L, 1L, 1L, 2L, 8L, 8L, 7L, 3L, 7L, 1L, 8L, 6L, 6L, 
3L, 8L, 6L, 7L, 7L, 7L, 8L, 8L, 6L), .Label = c("N", "NE", "E", 
"SE", "S", "SW", "W", "NW"), class = "factor")), row.names = c(NA, 
-28L), .Names = c("Sum.of.Incidents", "WindDirCompass"), spec = structure(list(
    cols = structure(list(Sum.of.Incidents = structure(list(), class = c("collector_integer", 
    "collector")), WindDirCompass = structure(list(), class = c("collector_character", 
    "collector"))), .Names = c("Sum.of.Incidents", "WindDirCompass" 
    )), default = structure(list(), class = c("collector_guess", 
    "collector"))), .Names = c("cols", "default"), class = "col_spec"), class = c("tbl_df", 
"tbl", "data.frame")) 

текущий код, я бегу, чтобы произвести сюжет:

ggplot(example, aes(x = factor(WindDirCompass), 
            y = Sum.of.Incidents)) + 
    geom_bar(stat = "identity", fill = "#990033") + 
    labs(title = "", x = "Wind direction", y = "Number of incidents") + 
scale_x_discrete(drop = FALSE) 

Я также упорядоченный по направлениям:

example$WindDirCompass <- 
    factor(example$WindDirCompass, 
      c("N", "NE","E","SE","S","SW","W","NW")) 

Как таковой отсутствует "SE". Есть ли способ заставить этот фактор появиться. У меня есть другие случаи, когда только одно или два направления имеют инциденты, поэтому большинство направлений ветра отсутствуют.

+1

пожалуйста показывают некоторые данные, используя 'dput()' и показать, что вы уже пробовали. – Jimbou

+2

есть. (если вы [добавите некоторые данные и код] (http://stackoverflow.com/questions/5963269/how-to-make-a-great-r-reproducible-example), кто-то может показать вам, как.) – beetroot

ответ

1

Я думаю, вы получите желаемый участок, когда вы удалите factor() от aes() и добавьте breaks:

ggplot(example, aes(x = WindDirCompass, 
        y = Sum.of.Incidents)) + 
    geom_bar(stat = "identity", fill = "#990033") + 
    labs(title = "", x = "Wind direction", y = "Number of incidents") + 
    scale_x_discrete(drop = FALSE, breaks = levels(example$WindDirCompass)) 

enter image description here

Использование factor() привело к неиспользованная уровень удаляется:

> levels(example$WindDirCompass) 
[1] "N" "NE" "E" "SE" "S" "SW" "W" "NW" 
> levels(factor(example$WindDirCompass)) 
[1] "N" "NE" "E" "S" "SW" "W" "NW" 
0

Если это только что уровни фактора падение, потому что они имеют 0 инцидентов, вы можете просто нужно добавить: + scale_x_discrete(drop=FALSE)

В коде это выглядит следующим образом:

ggplot(transect_weather_summary, aes(x = factor(WindDirCompass), 
           y = Sum.of.Incidents)) + 
    geom_bar(stat = "identity", fill = "#990033") + 
    labs(title = "", x = "Wind direction", y = "Number of incidents")+ 
    scale_x_discrete(drop=FALSE) 

Если это не проблема вы должны привести некоторые примеры данных

+0

Благодарю. Но когда я это пробовал, он не работает, поскольку никаких записей для этих направлений вообще нет. Я понимаю, что могу это сделать, добавив в них пустые строки, но надеялся, что есть более аккуратный способ сделать это, а не составлять данные. – cjp

Смежные вопросы