首页 > 解决方案 > 如何在 ggplot 中绘制 3 个变量 separarelt?

问题描述

我想创建一个时间序列图,显示两个变量如何随时间变化并将它们着色到适当的区域?

我有 2 个地区,英格兰和威尔士,我计算了每个地区的 total_tax 和 total_income。

我想ggplot使用 years 变量在多年来绘制这些。

我将如何做到这一点并分别为区域着色?

我有年份变量,我将把它放在 x 轴上,然后我想在图表上绘制两者incometaxtaxpaid但显示它们随着时间的推移如何变化?

我将如何添加第三个轴来绘制这两个变量如何随时间变化的图?

我已经尝试过这段代码,但它并没有按照我想要的方式工作。

ggplot(tax_data, filter %>% aes(x=date)) +
  geom_line(aes(y=incometax, color=region)) +
  geom_line(aes(y=taxpaid, color=region))+

标签: rggplot2

解决方案


ggplot 一开始有点难以掌握 - 我猜你正在尝试实现以下目标:

假设您的数据格式为每个日期、所得税和已缴税的列 - 我在这里创建一个示例:

library(tidyverse)

dataset <- tibble(date = seq(from = as.Date("2015-01-01"), to = as.Date("2019-12-31"), by = "month"),
                  incometax = rnorm(60, 100, 10),
                  taxpaid = rnorm(60, 60, 5))

现在,为每个绘制一条线incometaxtaxpaid我们需要对数据进行整形或“整理”(详见此处):

dataset <- dataset %>% pivot_longer(cols = c(incometax, taxpaid))

现在你有了这样的三列——我们已经把以前的列名变成了变量name

# A tibble: 6 x 3
  date       name      value
  <date>     <chr>     <dbl>
1 2015-01-01 incometax 106. 
2 2015-01-01 taxpaid    56.9
3 2015-02-01 incometax 112. 
4 2015-02-01 taxpaid    65.0
5 2015-03-01 incometax  95.8
6 2015-03-01 taxpaid    64.6

这现在具有正确的格式ggplot,您可以将 映射name到线条的颜色:

ggplot(dataset, aes(x = date, y = value, colour = name)) + geom_line()

推荐阅读