[英]ggplot2 barplot breaks when position = "dodge" used
我目前正在為大學項目開發 COVID-19 Germany Shiny 應用程序。 我正在嘗試制作一個條形圖,顯示德國不同區域級別的每日感染人數。 這不是 Shiny App 的特定問題,它更像是 ggplot。 我在沒有 Shiny App 環境的情況下重現了這個問題。 我的基本代碼如下:
require(tidyverse)
library(tidyverse)
require(lubridate)
library(lubridate)
library(readr)
require(zoo)
library(zoo)
data <- read_csv("https://opendata.arcgis.com/datasets/dd4580c810204019a7b8eb3e0b329dd6_0.csv")
## Data Coding data Datensatz
data$Meldedatum <- ymd_hms(data$Meldedatum)
data$Meldedatum <- date(data$Meldedatum)
# Label Deutschland
data$label_de <- paste("Deutschland")
# Label Deutschland - Alter
data$label_de_age <- paste(data$label_de, data$Altersgruppe)
# Label Bundesland Alter
data$label_bl_age <- paste(data$Bundesland, data$Altersgruppe)
# Label SK/LK Alter
data$label_sklk_age <- paste(data$Landkreis, data$Altersgruppe)
#Data Long
data_long <- data[c( "Meldedatum", "AnzahlFall","Bundesland", "Landkreis" ,"label_de_age", "label_bl_age", "label_sklk_age")]
data_long$Deutschland <- "Deutschland"
data_long<- pivot_longer(data_long, -c( Meldedatum, AnzahlFall), values_to = "Gebiet")
data_long<- data_long[c("Meldedatum", "AnzahlFall", "Gebiet")]
列data_long$Gebiet
的特定新標簽對我閃亮的應用程序很重要。 現在,如果我想在沒有position = "dodge"
情況下繪制例如 "Deutschland" (Germany) 和 "Bayern" (Bavaria) 的每日感染數量,我的圖表如下所示,一開始沒問題。
# Plot Deutschland and Bayern
ggplot(data = subset(data_long, Gebiet %in% c("Deutschland", "Bayern" )),
mapping = aes(
x= Meldedatum,
y= AnzahlFall,
fill = Gebiet
) )+
geom_bar(stat = "identity")
但是,如果我現在將 line position = "dodge"
到geom_bar()
我的情節就會中斷。 看起來像下面這樣。
# Plot Deutschland and Bayern with dodge
ggplot(data = subset(data_long, Gebiet %in% c("Deutschland", "Bayern" )),
mapping = aes(
x= Meldedatum,
y= AnzahlFall,
fill = Gebiet
) )+
geom_bar(stat = "identity", position = "dodge")
有人知道為什么會發生這種情況以及如何解決這個問題嗎?
謝謝您的幫助。
問題是您每個日期有多個觀察結果。 因此,當使用position="dodge"
時,每個日期(當然還有區域)會得到多個條形。 要解決此問題,請在繪圖前按日期和區域聚合您的數據,例如通過使用count(Meldedatum, Gebiet, wt = AnzahlFall)
將一個新變量(默認命名為n
)添加到您的 df 中,其中包含每個日期和地區:
library(tidyverse)
library(lubridate)
library(readr)
library(zoo)
data <- read_csv("https://opendata.arcgis.com/datasets/dd4580c810204019a7b8eb3e0b329dd6_0.csv")
## Data Coding data Datensatz
data$Meldedatum <- ymd_hms(data$Meldedatum)
data$Meldedatum <- date(data$Meldedatum)
# Label Deutschland
data$label_de <- paste("Deutschland")
# Label Deutschland - Alter
data$label_de_age <- paste(data$label_de, data$Altersgruppe)
# Label Bundesland Alter
data$label_bl_age <- paste(data$Bundesland, data$Altersgruppe)
# Label SK/LK Alter
data$label_sklk_age <- paste(data$Landkreis, data$Altersgruppe)
#Data Long
data_long <- data[c( "Meldedatum", "AnzahlFall","Bundesland", "Landkreis" ,"label_de_age", "label_bl_age", "label_sklk_age")]
data_long$Deutschland <- "Deutschland"
data_long<- pivot_longer(data_long, -c( Meldedatum, AnzahlFall), values_to = "Gebiet")
data_long<- data_long[c("Meldedatum", "AnzahlFall", "Gebiet")]
data_long %>%
count(Meldedatum, Gebiet, wt = AnzahlFall) %>%
filter(Gebiet %in% c("Deutschland", "Bayern")) %>%
ggplot(mapping = aes(
x= Meldedatum,
y= n,
fill = Gebiet
))+
geom_bar(stat = "identity", position = "dodge")
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.