我有一个包含4个变量的数据框:一个ID号(chr),一个学位类型(factor带有Grad和Undergrad的2个级别),一个学位年份(chr带有年份)和雇佣记录类型(factor带有6个级别)。
我想将此数据显示为按年份显示的唯一ID号的计数,作为6种就业记录类型的堆积面积图。因此,在y轴上计数ID号数,在x轴上计数度年,x的值是该年的ID数,并且填充将处理记录类型。我使用ggplot2在RStudio。
我使用了以下代码,但y轴不计算不同的ID:
ggplot(AlumJobStatusCopy, aes(x=Degree.Year, y=Entity.ID,
fill=Employment.Data.Type)) + geom_freqpoly() +
scale_fill_brewer(palette="Blues",
breaks=rev(levels(AlumJobStatusCopy$Employment.Data.Type)))
Run Code Online (Sandbox Code Playgroud)
我也尝试设置y = Entity.ID为y = ..count..,但也没有用。我一直在寻找解决方案,因为这似乎与我编写aes代码的方式有关。
我还根据类似绘图的示例尝试了以下代码:
ggplot(AlumJobStatusCopy, aes(interval)) +
geom_area(aes(x=Degree.Year, y = Entity.ID,
fill = Employment.Data.Type)) +
scale_fill_brewer(palette="Blues",
breaks=rev(levels(AlumJobStatusCopy$Employment.Data.Type)))
Run Code Online (Sandbox Code Playgroud)
这似乎甚至行不通。我已经阅读了文档,现在才机智。
编辑:
在找出问题的答案之后,我意识到我实际上没有为Year变量使用正确的值。计数无法告诉我任何信息,因为我试图显示缺少记录的情况下的增长和当前记录的下降。
我的数据集:年份,整数,1960-2015当前记录,数字:当前记录总数的百分比无记录,数字:非当前记录总数的百分比
因此,每年的Ergo值具有两个相应的百分比值。我现在使用2条线而不是面积图,因为Y轴具有不同的值而不是计数函数,但是我仍然希望填充曲线下的面积。我尝试使用Melt将数据从宽转换为长,但是仍然无法填充这两行。填充仅出于美学目的,因为我想为每个填充使用渐变,其中1个填充比另一个填充稍轻。
这是我当前的代码:ggplot(Alum,aes(Year))+ geom_line(aes(y = Percent.Records,color =“ Percent.Records”))+ geom_line(aes(y = Percent.No.Records,color = “”百分比记录“))+ scale_y_continuous(标签=百分比)+ ylab('总记录百分比')+ ggtitle(”活跃的在职校友就业记录“)+ scale_x_continuous(breaks = seq(1960,2014,by = 5))
我还不能发布图片。
我认为您缺少对数据进行汇总以获取要在y轴上绘制的数量的步骤。这是一个示例,其中包含一些玩具数据,类似于您描述玩具的数据:
# Make toy data with three levels of employment type
set.seed(1)
df <- data.frame(Entity.ID = rep(LETTERS[1:10], 3), Degree.Year = rep(seq(1990, 1992), each=10),
Degree.Type = sample(c("grad", "undergrad"), 30, replace=TRUE),
Employment.Data.Type = sample(as.character(1:3), 30, replace=TRUE))
# Here's the part you're missing, where you summarize for plotting
library(dplyr)
dfsum <- df %>%
group_by(Degree.Year, Employment.Data.Type) %>%
tally()
# Now plot that, using the sums as your y values
library(ggplot2)
ggplot(dfsum, aes(x = Degree.Year, y = n, fill = Employment.Data.Type)) +
geom_bar(stat="identity") + labs(fill="Employment")
Run Code Online (Sandbox Code Playgroud)
结果可能需要进行一些微调,但我认为这就是您的意思。这里,条形图的高度相等,因为玩具数据中的每一年都包含相等数量的ID;如果ID的数量不同,则条形的总高度也会变化。

如果您不想将对象添加到工作区中,只需在对的调用中进行求和ggplot():
ggplot(tally(group_by(df, Degree.Year, Employment.Data.Type)),
aes(x = Degree.Year, y = n, fill = Employment.Data.Type)) +
geom_bar(stat="identity") + labs(fill="Employment")
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
6023 次 |
| 最近记录: |