如何绘制堆积和放大分段条形图随着时间的推移?

时间:2017-03-09 12:47:47

标签: r ggplot2

我需要分析一段时间内的天气状况数据。我的数据示例如下:

# Example dataset
Quarter <- c("Q1", "Q2", "Q2", "Q2", "Q3", "Q4")
Weather <- c("cloudy", "cloudy", "sunny", "cloudy", "sunny", "cloudy")
Duration <- c(16, 10, 2, 5, 15, 14)
WeatherCondData <- data.frame(Quarter, Weather, Duration, stringsAsFactors = F)

我手动设置因子顺序,然后使用以下代码在ggplot2中绘图:

# Make quarter a factor
WeatherCondData$Quarter <- as.factor(WeatherCondData$Quarter)
# Plot
ggplot(WeatherCondData, aes(x = Quarter, y = Duration, fill = Weather)) +
  geom_bar(stat = "identity", position = "stack") +
  coord_flip() +
  scale_x_discrete(limits = rev(levels(WeatherCondData$Quarter))) +
  theme_classic() +
  theme(legend.position = "bottom")

但是,我希望根据季度的时间长度显示天气状况持续多长时间。例如,在Q2中,我希望geom_bar的第一部分为红色10分钟,表示多云情况,然后在12分钟标记处变为蓝色2分钟(表示天气晴朗)然后返回最后5分钟为蓝色或混浊。

从本质上讲,我不希望在每个季度显示每个条件的总持续时间,但在条件发生变化时会突出显示。 这可能是使用ggplot2吗?

1 个答案:

答案 0 :(得分:1)

要更改堆叠条的排序,您需要更改分组:

WeatherCondData$order <- factor(1:nrow(WeatherCondData))

ggplot(WeatherCondData, aes(x = Quarter, y = Duration, fill = Weather, group = rev(order))) +
  geom_col() +
  coord_flip() +
  scale_x_discrete(limits = rev(levels(WeatherCondData$Quarter))) +
  theme_classic() +
  theme(legend.position = "bottom")

enter image description here