【问题标题】:将图例添加到 ggplot 以进行预测
【发布时间】:2022-01-12 01:49:28
【问题描述】:

我有一个用于我使用的不同预测的 ggplot。你能帮我为不同的预测添加标签吗?我粘贴了代码副本和当前图表的图片。不要介意标题、说明和副标题。

ggplot(Forecast_df, aes(date)) + 
  geom_tile(aes(alpha = Recession, y = 1), 
            fill = "grey", height = Inf) +
  scale_alpha_continuous(range = c(0, 1), breaks = c(0, 1), labels = c("0" = "Expansion", "1" = "Recession"))+
  geom_line(aes(y = ERVOLY), col = "black", size = .8)+
  geom_line(aes(y = ERVOL_vanilla), col = "blue", size = .8)+
  geom_line(aes(y = ERVOL_twofactor), col = "green", size = .8)+
  geom_line(aes(y = ERVOL_threefactor), col = "orange", size = .8)+
  ylab('Compounded Returns Next 12 Months (%)')+
  labs(x = NULL, alpha = "Economic Cylcle", color = "Economic Variable",
   title = "Rising Inflation Expectations in 2021",
   caption = 'Cleveland Fed Model of 10-year Inflation Expectations',
   subtitle = '"Directionality Matters"')+
  theme(plot.background = element_blank(),
    panel.grid.minor = element_blank(),
    panel.grid.major= element_blank(),
    text = element_text( color = "#003366"))

这是数据的一个子集(我希望这会有所帮助):

dput(head(Forecast_df, 10))


structure(list(INFEX = c(5.3755618, 5.2721824, 5.5661154, 5.407864, 
5.4896902, 5.1106146, 4.5055244, 4.6342849, 4.5102793, 4.6395631
), ERVOLY = c(NA, -1.0061220776063, -3.28324764731475, 
-2.69553459574718, 
-0.282378595190325, 0.452399878131127, -1.98818474608972, 
-2.02453229878801, 
-2.93519956175393, -3.3615903958241), date = structure(c(6695, 
6726, 6756, 6787, 6818, 6848, 6879, 6909, 6940, 6971), class = 
"Date"), 
Expansion = c(1, 1, 1, 1, 1, 1, 1, 1, 1, 1), Recession = c(0, 
0, 0, 0, 0, 0, 0, 0, 0, 0), ERVOLY_lag1 = c(NA, NA, -1.0061220776063, 
-3.28324764731475, -2.69553459574718, -0.282378595190325, 
0.452399878131127, -1.98818474608972, -2.02453229878801, 
-2.93519956175393), ERVOLY_lag2 = c(NA, NA, NA, -1.0061220776063, 
-3.28324764731475, -2.69553459574718, -0.282378595190325, 
0.452399878131127, -1.98818474608972, -2.02453229878801), 
ERVOL_vanilla = c(NA, NA, NA, 0.177969523019507, 1.0226601086044, 
2.95027193254105, 2.8634033844251, 0.549544852368316, 
0.594205304832909, 
-0.162404463789272), ERVOL_twofactor = c(NA, NA, NA, 
0.0942849089685699, 
0.91074093410051, 2.85616681306392, 2.81947921688057, 
0.512592472075962, 
0.537863435836189, -0.222954102109839), ERVOL_threefactor = c(NA, 
NA, NA, -0.313401798360953, 0.474416484910883, 2.44479892124736, 
2.49154716920072, 0.199652448822007, 0.23023289110162, 
-0.537285874249354
), ERVOL_AR2 = c(NA, NA, NA, -3.24926540322977, -2.50081867707103, 
-0.136146400989865, 0.424591722149989, -2.06171545794125, 
-1.92397323156163, -2.82956410641666), fe_vanilla = c(NA, 
NA, NA, -2.87350411876669, -1.30503870379473, -2.49787205440993, 
-4.85158813051482, -2.57407715115632, -3.52940486658684, 
-3.19918593203483), fe_twofactor = c(NA, NA, NA, -2.78981950471575, 
-1.19311952929083, -2.4037669349328, -4.80766396297029, 
-2.53712477086397, 
-3.47306299759012, -3.13863629371426), fe_threefactor = c(NA, 
NA, NA, -2.38213279738623, -0.756795080101207, -1.99239904311623, 
-4.47973191529044, -2.22418474761001, -3.16543245285555, 
-2.82430452157474), fe_AR2 = c(NA, NA, NA, 0.553730807482581, 
2.21844008188071, 0.588546279120992, -2.41277646823971, 
0.0371831591532463, 
-1.0112263301923, -0.532026289407435)), row.names = c(NA, 
10L), class = "data.frame")

【问题讨论】:

  • 这能回答你的问题吗:Add legend to ggplot2 line plot
  • 我会这么认为,但是如果我在代码的“经济变量”部分计算这些预测,我会遗漏一部分难题。简单地为每种颜色添加 scale_color_manual 函数并不能解决问题。
  • 为了帮助我们帮助您,您是否介意提供 a minimal reproducible example,包括您的数据的 sn-p。要共享您的数据,您可以在控制台中输入dput(NAME_OF_DATASET),然后将以structure(.... 开头的输出复制并粘贴到您的帖子中。如果您的数据集有很多观察结果,您可以这样做,例如dput(head(NAME_OF_DATASET, 20)) 用于前二十行数据。

标签: r ggplot2 data-visualization legend


【解决方案1】:

您可以使用我将在此处概述的第一种方法获得所需的结果,尽管可以说更好的方法是首先使用 gather()pivot_longer()melt()reshape()一个更类似于Tidy Data 的结构。不过出于空间和时间的考虑,我这里直接展示一下。

scale_color_manual() 添加到绘图中没有帮助的原因是scale_* 的功能仅重新着色/重塑现有比例。您的原始绘图没有创建颜色比例,因此您将尝试重新着色不存在的比例。 :)

您的绘图创建的唯一比例是alpha=,原因是因为您在aes() 中指定了该比例。这是使用ggplot2 创建比例的“秘诀”,因为绘图设置为将美学属性映射到数据框中的列。有位置美学(如xywidth等),还有图形美学(如colorfillalphasize等...... )。位置美学将您的数据映射到绘图区域中的某个位置,而图形美学会根据您的数据改变几何图形的外观。对于图形美学,还创建了一个图例。因此,要显示图例,您需要在 aes() 中指定图形美学。

aes() 中指定一个值将在图例中设置美学名称。然后使用默认比例应用颜色...或通过您使用scale_* 命令设置的另一个比例。这是一个没有scale_color_manual()的例子:

(注意:必须删除 scale_alpha_continous(),因为您的 dput() 在“衰退”列中只有一个值)。

p <- ggplot(Forecast_df, aes(date)) + 
  geom_tile(aes(alpha = Recession, y = 1), 
            fill = "grey", height = Inf) +
  # scale_alpha_continuous(range = c(0, 1), breaks = c(0, 1), labels = c("Expansion", "Recession"))+
  geom_line(aes(y = ERVOLY, col="ERVOLY"), size = .8)+
  geom_line(aes(y = ERVOL_vanilla, col="Vanilla ERVOL"), size = .8)+
  geom_line(aes(y = ERVOL_twofactor, col="Twofactor ERVOL"), size = .8)+
  geom_line(aes(y = ERVOL_threefactor, col="Threefactor ERVOL"), size = .8)+
  ylab('Compounded Returns Next 12 Months (%)')+
  labs(x = NULL, alpha = "Economic Cylcle", color = "Economic Variable",
       title = "Rising Inflation Expectations in 2021",
       caption = 'Cleveland Fed Model of 10-year Inflation Expectations',
       subtitle = '"Directionality Matters"')+
  theme(plot.background = element_blank(),
        panel.grid.minor = element_blank(),
        panel.grid.major= element_blank(),
        text = element_text( color = "#003366"))
p

您会看到,创建了一个图例,并相应地标记了键。然后您可以使用scale_color_manual() 添加您想要的颜色:

p + scale_color_manual(values=c(
    "ERVOLY" = "black",
    "Vanilla ERVOL" = "blue",
    "Twofactor ERVOL"="green",
    "Threefactor ERVOL"="orange"))

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-01-05
    • 2020-10-12
    • 2015-05-22
    • 2018-04-13
    相关资源
    最近更新 更多