Ich versuche, anderen Text zu haben jede Facette von gestapelten Balkendiagramme in R überlagert, aber ich bin mit in die folgenden Fehler:Schreiben verschiedener Text in jeder Facette von ggplot
Error: Aesthetics must either be length one, or the same length as the dataProblems:xval, yval, lab
In addition: Warning messages:
1: In eval(expr, envir, enclos) : NAs introduced by coercion
2: In eval(expr, envir, enclos) : NAs introduced by coercion
Der Code, den ich versuchte zu laufen ist unten:
library(ggplot2)
m40<-c(3.92,5.88,20.59,69.61) #n=102
m50<-c(5.97,7.46,18.66,67.91) #n=134
m60<-c(8.82,13.73,22.55,54.90) #n=102
m70<-c(10.26,10.26,23.08,56.41) #n=39
mall<-c(6.63,9.02,20.69,63.66) #n=377
w40<-c(12.68,10.56,26.06,50.70) #n=142
w50<-c(17.83,14.01,31.21,36.94) #n=157
w60<-c(10.00,26.25,28.75,35.00) #n=80
w70<-c(10.87,8.70,32.61,47.83) #n=46
wall<-c(13.88,14.59,29.18,42.35) #n=425
gender <- rep(c('Men','Women'), c(20,20))
age <- rep(c('40-49', '50-59', '60-69', '70+', 'All'), each = 4)
values <- c(m40, m50, m60, m70, mall, w40, w50, w60, w70, wall)
status <- rep(c("Treated and controlled","Treated but uncontrolled","Diagnosed but untreated",
"Undiagnosed"), 5)
grays <- c("Black", "Gray40", "Gray60", "Gray80")
data = data.frame(gender, age, values, status)
data$status = factor(data$status,levels(data$status)[c(2,3,1,4)])
ann_text <- data.frame(xval=c(0.4,1,2,3,4,5),yval=-3,lab=c("N=","102","134","102","39","377", "N=", "142","157","80","46","425"),
gender = c("Men","Men","Men","Men","Men","Men","Women","Women","Women","Women","Women","Women"))
ann_text
ggplot(data=data) + #starts graph
aes(x=age, y=values, fill=status,order=as.numeric(status)) + #selects variables
facet_grid(~gender) + #makes 2 boxes for gender
geom_bar(stat="identity") + # height of bars represents values in the data
theme(axis.text=element_text(size=18),# changes size of tick mark labels
axis.title=element_text(size=20),
strip.text.x=element_text(size=20),
legend.text=element_text(size=15),
panel.grid.major.x = element_blank()) + #removes vertical grid lines
scale_y_continuous(breaks = seq(0,100,10)) + # makes tick marks at every 10%
ylab("%") + # change y label
coord_cartesian(ylim = c(-5,102),xlim = c(0.2,5.8)) +
xlab("Age Group, Years") + #capitalize A in x label
labs(fill="") + #removes title from legend
geom_text(data = ann_text,aes(x=xval,y=yval,label=lab)) +
#annotate("text",x=c(0.4,1,2,3,4,5),y=-3,label=c("N:","102","134","102","39","377")) +
scale_fill_manual(values=grays,
guide = guide_legend(reverse=TRUE))
Irgendeine Idee, wie man es repariert?
ich die Änderungen im Datenrahmen hinzuzufügen vergaß ich. Jetzt ist es reproduzierbar. Das Ergebnis ist noch lange nicht perfekt, aber ich habe das Problem hauptsächlich aus der Frage gelöst. Von hier aus sollte es recht einfach sein, das gewünschte Grundstück zu bekommen. – Alex
Danke @Alex für Ihre Hilfe! Gibt es eine Möglichkeit für mich, die Altersgruppe "Alle" anders aussehen zu lassen als die Altersgruppen? Beispielsweise den Text "Alle" fett formatieren, die Schattierung der altersspezifischen gestapelten Balkendiagramme mit Kreuzschraffur versehen oder zusätzlichen Platz zwischen den altersspezifischen Balkendiagrammen und dem Balkendiagramm "Alle" schaffen? –