供参考,这是我的数据- here
我试图查看这些变量之间的关系并使用barplot。以下是我正在使用的R代码并绘制出我正在绘制的图。
library(lattice)
barchart(DiagAge~interaction(Gender,Race),groups=Ethnicity,data=df,auto.key=T,stack=T)
我想在Y轴上看到DiagAge(诊断出糖尿病的年龄),但是,当前代码显示的是看起来像某事物频率的数字。
答案 0 :(得分:0)
这里是tidyr
和ggplot
的解决方案。我使用代表性数据来节省时间。以后,请使用dput(data)
将数据添加到您的问题中。这是一个建议的解决方案:您可以根据需要更改颜色和主题。
library(tidyverse)
df<-data.frame(Gender=c("M","F","M"),Race=c("Non White","White","Non White"),DiagAge=c(13,24,25))
df %>%
mutate_if(is.character,as.factor) %>%
ggplot(aes(Race,DiagAge,fill=Gender))+
geom_bar(stat="identity",position="identity",col="black")+
geom_label(aes(label=DiagAge))
欢呼
答案 1 :(得分:0)
tidyverse
是你的朋友!主要是ggplot2::geom_col
。
您的代码可能如下所示:
library(tidyverse)
mytbl <- df %>%
mutate(racegender = paste(Race,Gender))
g <- ggplot(mytbl, aes(racegender)) + scale_fill_brewer(palette = "Spectral")
g + geom_col(aes(fill = Ethnicity, y = DiagAge)) +
labs(title="Your title",
subtitle="Your subtitle") +
theme(axis.text.x = element_text(angle=65, vjust=0.6))
在这里,我在diamonds
数据集上使用此代码来说明您的情况。
library(tidyverse)
通过cutcolor
创建一个mutate
变量。为了示例简洁起见,我filter
给出了某些值(很可能对您没有必要或无效)。
mytbl <- diamonds %>%
mutate(cutcolor = paste(cut,color)) %>%
filter(color %in% c("D", "E", "F"),
cut %in% c("Fair", "Good", "Very Good")) # to limit the number of columns
图形将使用mytbl
并在水平轴上具有cutcolor
:
g <- ggplot(mytbl, aes(cutcolor)) + scale_fill_brewer(palette = "Spectral")
主要的ggplot
功能是geom_col
。 fill
堆叠'em,垂直轴为price
(在您的情况下为DiagAge
)。 theme
部分有助于倾斜水平标签文本。
g + geom_col(aes(fill = clarity, y = price)) +
labs(title="Bar Graph with Stacked Types",
subtitle="Price Across Diamond Cut and Color") +
theme(axis.text.x = element_text(angle=65, vjust=0.6))angle=65, vjust=0.6))
结果: