【发布时间】:2021-03-21 15:57:29
【问题描述】:
我有一个数据集,其中包含 2008 年至 2017 年每年每个州的 SUD 治疗率。两个州接受了干预,其余的没有。我可以将每种干预状态的治疗率绘制为单独的线,并将非干预状态(使用平均值分组为一条线)绘制在同一张图上。
我想在图例中包含分组的行,但在这样做时遇到了麻烦。到目前为止,只有干预状态被标记。我粘贴了数据的子集(不完全是绘图显示的内容,但提供了对结构的洞察),并为 ggplot 代码提供了结果图。任何帮助,将不胜感激。谢谢!
structure(list(statename = c("Alabama", "Alabama", "Alabama",
"Alabama", "Alabama", "Alabama", "Alabama", "Alabama", "Alabama",
"Alabama", "Colorado", "Colorado", "Colorado", "Colorado", "Colorado",
"Colorado", "Colorado", "Colorado", "Colorado", "Colorado", "Iowa",
"Iowa", "Iowa", "Iowa", "Iowa", "Iowa", "Iowa", "Iowa", "Iowa",
"Iowa", "Washington", "Washington", "Washington", "Washington",
"Washington", "Washington", "Washington", "Washington", "Washington",
"Washington"), YEAR = c(2008L, 2009L, 2010L, 2011L, 2012L, 2013L,
2014L, 2015L, 2016L, 2017L, 2008L, 2009L, 2010L, 2011L, 2012L,
2013L, 2014L, 2015L, 2016L, 2017L, 2008L, 2009L, 2010L, 2011L,
2012L, 2013L, 2014L, 2015L, 2016L, 2017L, 2008L, 2009L, 2010L,
2011L, 2012L, 2013L, 2014L, 2015L, 2016L, 2017L), RML_ever_state = c(0L,
0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
1L, 1L, 1L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 1L, 1L, 1L,
1L, 1L, 1L, 1L, 1L, 1L, 1L), TotalAdolescent_noprior_Admissionrate = c(4.07959747971533,
17.1095315089946, 28.605586683907, 11.488423601983, 14.9233623164375,
13.0325736612464, 11.5686458431041, 15.2887154594351, 18.9275946907701,
17.9164783752891, 28.9653195613967, 30.542173819128, 33.8611241088185,
29.9657748758525, 25.214146698236, 22.847991066509, 21.975843495247,
21.783383749025, 25.8868468603421, 23.6029880132029, 45.9863203727017,
51.6710909784629, 61.713238062499, 48.3292305542656, 52.4339028740025,
54.9353761700907, 50.2282357945714, 46.8358255273624, 63.8611763171622,
63.7710085311979, 50.5294974023959, 53.0407358054702, 54.7486826331652,
59.981622172154, 57.2193036593259, 54.5478493207391, 49.924220486418,
41.9396870928129, 11.3163228651143, 0.258492875751707)), row.names = c(1L,
2L, 3L, 4L, 5L, 6L, 7L, 8L, 9L, 10L, 31L, 32L, 33L, 34L, 35L,
36L, 37L, 38L, 39L, 40L, 117L, 118L, 119L, 120L, 121L, 122L,
123L, 124L, 125L, 126L, 387L, 388L, 389L, 390L, 391L, 392L, 393L,
394L, 395L, 396L), class = "data.frame")
ggplot(vars1, aes(x = YEAR, y = TotalAdolescent_noprior_Admissionrate, group = statename)) +
stat_summary(
data = ~ subset(., RML_ever_state == 0),
aes(group = -1),
fun.data = mean_se,
geom = "line", size = 3, colour = "green"
) +
geom_line(
data = ~ subset(., RML_ever_state == 1),
aes(colour = statename)
) + scale_x_discrete( limits=c(2008,2009,2010,2011,2012,2013,2014,2015,2016,2017))
【问题讨论】:
-
由于图例显示
state,一个想法是将非干预状态的摘要视为一个单独的状态(也许此时将列称为不同的),那么您将拥有所有 50 个州 + 不干预摘要;这会将它包含在同一个图例中。 -
另外,最好提供一个可重现的小例子(你在这里很接近它)。您可以创建一个最小数据集并使用
dput(vars1)将vars1的输出剪切/粘贴到帖子中。人们将能够通过剪切和粘贴进行复制。您可能会在几分钟内得到答案,而不是完全没有或几小时/几天。但是,我上面提供的链接可能会回答您的问题。 -
这会帮助别人帮助你。我不知道如何使用您的方法来解决此问题,我通常通过创建一个包含原始数据和摘要数据之类的新列并拥有一个新因素来解决这个问题。所有项目都以图例结尾,但标题不同,因为我将汇总数据与非汇总数据包括在内。我并不是说这是最好的方法,只是我所做的那样查看数据。
-
谢谢。我对 R 很陌生,并且导航 ggplot 比我想象的要复杂。我感谢您的帮助。感谢您,我了解了 dput()。
-
我找到了一个带注释的手动解决方案,通过在ggplot末尾添加以下内容,我可以控制放置标签的位置。不是最好的解决方案,但可以解决 + annotate('text', x=2016, y=15, label = "Non-RML \n state")