首页 文章

ggplot2饼图,数字不会出现

提问于
浏览
2

我在数据可视化方面很新,在R中使用ggplot2 . 我试图在饼图中可视化一些数据 . 我使用的代码是这样的:

percentageData <- data.frame(Year = "1987", 
                             TypeOfDelays = c(percDepDelays[1], percArrDelays[1], percAntDepdelays[1], percAntArrDelays[1]),
                             Label = factor(c("Departure delays", "Arrival Delays", "Early Departure", "Early arrival")))

labels = c("Departure delays", "Arrival Delays", "Early Departure", "Early arrival")
ggplot(data = percentageData) +
  geom_bar(aes(x="", y=TypeOfDelays, fill=Label), stat = "identity", width = 1) + 
  coord_polar(theta = "y", start = 0) +
  theme_void() +
  geom_text(aes(x = 1, y=cumsum(TypeOfDelays) - TypeOfDelays/2, label=labels))

我正在分析的数据集是:flights dataset

我的问题是每年可视化每种延迟的延迟次数(我正在考虑4种类型的延误,出发,到达,出发前的时间和出发前的到达时间) .

我的想法是为每年创建一个包含年份的数据框,每种类型的延迟数百分比(一年中的#delays总数/该年度的#个航班数)和描述延迟类型的Label . 我已经计算了每种延迟类型的百分比 . 我想在饼图中可视化这些数据,我尝试用上面的代码创建一个饼图,结果如下:
enter image description here

所以我的问题是这些:

1)为什么百分比数据不可视化?我的代码有什么问题?

2)如何在正确的位置正确显示标签?

提前致谢 .

1 回答

  • 3

    为了得到你想要的,你可以在以下几点调整你的代码:

    • aes 移动到 ggplot() 部分

    • geom_text 中的 aes 删除 xy 规范

    • position = position_stack(vjust = 0.5) 添加至 geom_text

    最终代码:

    ggplot(data = percentageData, aes(x="", y = TypeOfDelays, fill = Label)) +
      geom_bar(stat = "identity", width = 1) + 
      geom_text(aes(label = labels), position = position_stack(vjust = 0.5)) +
      coord_polar(theta = "y", start = 0) +
      theme_void()
    

    这使:

    enter image description here

    这些数字没有要求 ggplot2 包含它们 . 一个潜在可能:

    ggplot(data = percentageData, aes(x="", y = TypeOfDelays, fill = Label)) +
      geom_bar(stat = "identity", width = 1) + 
      geom_text(aes(label = paste0(labels, ': ', TypeOfDelays,' %')), position = position_stack(vjust = 0.5)) +
      coord_polar(theta = "y", start = 0) +
      theme_void()
    

    这使:

    enter image description here


    使用数据:

    percentageData <- data.frame(Year = "1987", 
                                 TypeOfDelays = c(30, 45, 5, 20),
                                 Label = factor(c("Departure delays", "Arrival Delays", "Early Departure", "Early arrival")))
    labels <- c("Departure delays", "Arrival Delays", "Early Departure", "Early arrival")
    

相关问题