gpt4 book ai didi

R 将 Y 轴设置为 ggplot2 中的不同计数

转载 作者:行者123 更新时间:2023-12-02 11:23:40 25 4
gpt4 key购买 nike

我有一个包含 4 个变量的数据框:一个 ID 号 (chr)、一个学位类型(factor w/2 个研究生和本科生级别)、一个学位年份(带有年份的 chr)和就业记录类型(带有 6 个级别的因素)。

我想将此数据显示为按年份计算的唯一 ID 号计数,作为 6 种就业记录类型的堆积面积图。因此,y 轴上的 ID 编号的计数,x 轴上的度数年份,x 的值是该年份的 ID 数量,并且填充将处理记录类型。我在 RStudio 中使用 ggplot2

我使用了以下代码,但 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)))

我还尝试将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)))

这似乎不起作用。我已经阅读了文档,但束手无策。

编辑:

找出问题的答案后,我意识到我实际上并没有为 Year 变量使用正确的值。当我试图显示缺乏记录的增加和当前记录的减少时,计数没有告诉我任何信息。

我的数据集:
年份,int,1960-2015
当前记录,数量:当前记录总数的百分比
无记录,num:非当前记录总数的百分比

因此,每个年份值都有两个相应的百分比值。我现在使用 2 条线而不是面积图,因为 Y 轴具有不同的值而不是计数函数,但我仍然希望填充曲线下的面积。我尝试使用 Melt 将数据从宽转换为长,但仍然无法填充这两行。填充只是出于美观目的,因为我想对每个填充使用渐变,其中 1 个填充比另一个填充稍浅。

这是我当前的代码:

ggplot(Alum, aes(Year)) + 
geom_line(aes(y = Percent.Records, colour = "Percent.Records")) +
geom_line(aes(y = Percent.No.Records, colour = "Percent.No.Records")) +
scale_y_continuous(labels = percent) + ylab('Percent of Total Records') +
ggtitle("Active, Living Alumni Employment Record") +
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")

结果可能需要一些微调,但我认为这就是你的意思。此处,条形高度相等,因为玩具数据中的每一年都包含相同数量的 ID;如果 ID 的数量发生变化,则条形的总高度也会变化。 enter image description here

如果您不想将对象添加到工作区,只需在调用 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")

关于R 将 Y 轴设置为 ggplot2 中的不同计数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31756294/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com