微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

需要在ggplot中添加图例和修复轴

如何解决需要在ggplot中添加图例和修复轴

我是 ggplot 的新手,我正在尝试弄清楚如何向图形添加图例并重新标记 x 轴。我已经附上了绘图代码resulting graph 。我想添加一个图例来解释蓝线以及绿点和红点是什么。我还希望 x 轴上的年份显示为 2018,2019,...,2020 而不是 2017.5,2010.0,2020.0。我在在线文档中找不到解决方案。感谢您的帮助。

  ggplot(data = annual_rate_preds) + 
    geom_point(mapping = aes(x = year,y = predicted),color = 'green') +
    geom_line(mapping = aes(x = year,y = observed),color = 'blue') + 
    geom_point(data = backfit_rate_preds,mapping = aes(x = target_year,y = rate_pred),shape = 18,color = 'red',size = 2) +
    theme(plot.title = element_text(size = 10))

解决方法

使用一些随机示例数据可以这样实现:

  1. 使用 scale_x_continuous(breaks = scales::pretty_breaks()) 可以提供漂亮的 x 轴中断和标签
  2. 要获得图例,您必须映射美学,即在 aes() 内移动 color。然后可以通过 scale_color_manual
  3. 设置颜色值
  4. 轴、图例、...的标签可以通过 labs()
  5. 设置
  6. 最棘手的部分是让图例正确。为此,我使用 guidesguide_legend 来调整图例,使得 observed 只显示一条实线,而其他类别只显示点(形状 16)。
library(ggplot2)

set.seed(42)
annual_rate_preds <- data.frame(
  predicted = runif(13,-.1,.1),observed = runif(13,year = 2008:2020
)

backfit_rate_preds<- data.frame(
  rate_pred = runif(13,target_year = 2008:2020
)

ggplot(data = annual_rate_preds) + 
  geom_point(mapping = aes(x = year,y = predicted,color = 'predicted')) +
  geom_line(mapping = aes(x = year,y = observed,color = 'observed')) + 
  geom_point(data = backfit_rate_preds,mapping = aes(x = target_year,y = rate_pred,color = 'rate_pred'),shape = 18,size = 2) +
  scale_x_continuous(breaks = scales::pretty_breaks()) +
  scale_color_manual(values = c(predicted = "green",observed = "blue",rate_pred = "red")) +
  theme(plot.title = element_text(size = 10)) +
  guides(color = guide_legend(override.aes = list(linetype = c("solid","blank","blank"),shape = c(NA,16,16)))) +
  labs(x = "Year",y = NULL,color = NULL)

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?