【问题标题】:Is it possible to plot two variables using a third one as filter in R?是否可以使用第三个变量作为 R 中的过滤器来绘制两个变量?
【发布时间】:2018-04-18 15:29:39
【问题描述】:

我正在尝试使用两个变量(DATEINT_RATE)创建一个绘图,使用 过滤器 第三个变量 GRADE 的内容。 问题是我真的不知道如何使用变量GRADE 作为行的过滤器。

在下面的部分中,我提供了详细的起始数据示例以及我试图实现的绘图。 提前致谢。

 STARTING DATA     

 | DATE  | INT_RATE | GRADE |
––––––––––––––––––––––––––––––
 | 1-jan | 5%       | A     | <-- A
 | 5-feb | 3%       | B     |
 | 9-feb | 2%       | D     |
 | 1-apr | 3%       | A     | <-- A
 | 5-jun | 5%       | A     | <-- A
 | 1-aug | 3%       | G     |
 | 1-sep | 2%       | E     |
 | 3-nov | 1%       | C     |
 | 8-dec | 8%       | A     | <-- A
 |   .   | .        | .     |
 |   .   | .        | .     |
 |   .   | .        | .     |

这就是我想要实现的那种图,这是一个非常基本的图,除了之前需要的过滤工作。

WANTED RESULT:

GRADE "A"

   INT_RATE
       |
       |
    8%-|                            •   
       |                           ̷
       |                        ̷ 
       |                     ̷
    5%-|  •              •
       |   \            /
       |     \        /
       |       \     /
       |         \ /
    3%-|          •
       |
       |  
       |
       |
    ––––––––––––––––––––––––––––––––––-–––>
       |  ˆ       ˆ      ˆ           ˆ   DATE
       |1-jan   1-apr   5-jun      8-dec

编辑 1:

在@apax 的宝贵帮助下,我设法得到了一个绘图,但结果并不令人满意,因为 R 显示它的方式很奇怪(我认为这可能与所讨论的数据集非常大有关800k 行)。你有什么建议吗?

顺便说一句,这解决了我的问题:

plot(x = DATE, y = INT_RATE, data =  filter(df, GRADE == "A"))

我还上传了格式错误图表的 PNG。 再次感谢大家。

【问题讨论】:

  • 我看到您接受了一个答案并编辑了您的帖子以提出一个新问题。如果您对第二个问题的回答感兴趣,最好在新帖子中提问,而不是编辑您当前的帖子。请注意,为了帮助尽可能多的用户,您的帖子只有一个标题,您的问题范围是有限的,您只能接受一个答案 - 即当其他用户遇到相同类型的问题时,他们可能会遇到这个帖子。埋在 cmets 中的问答无法实现这一目标。
  • @CPak 非常感谢您的建议。你一直很善良

标签: r variables plot ggplot2


【解决方案1】:

这是一个快速的单行解决方案,我假设您的数据存储在一个名为 df 的对象中

library(dplyr) ## For filter() function below

plot(x = DATE, y = INT_RATE, data =  filter(df, GRADE == "A"))

【讨论】:

  • 或base R的by:by(df, df$GRADE, function(d) plot(DATE, INT_RATE, d))
  • @apax 你的解决方案工作得很好,除了 X 轴上的 DATA 莫名其妙地不按顺序排列。你知道原因吗?
  • @scugn1zz0 我对您的问题的理解是您在询问如何对数据进行排序。看看这个相关的堆栈溢出thread
  • @apax 非常感谢,我设法解决了,问题是日期没有从 R 正确解释,我必须执行以下操作:df$DATE &lt;- as.Date(gsub("^", "01-", df$DATE), format="%d-%b-%Y")
  • @apax 我上传了我正在获取的图表,你知道如何改进它吗?
【解决方案2】:

您可以使用ggplot2facet_wrap(...)

library(ggplot2)
ggplot(mtcars, aes(x=mpg, y=disp)) +
  geom_point() +
  facet_wrap(~cyl)

为了您的数据

ggplot(data, aes(x=DATE, y=INT_RATE)) +
  geom_line() +
  facet_wrap(~GRADE)

附:这为所有等级提供了单独的图表。但这应该不是问题。

【讨论】:

    猜你喜欢
    • 2021-02-12
    • 1970-01-01
    • 2023-02-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-07-06
    • 1970-01-01
    相关资源
    最近更新 更多