【问题标题】:How to plot data.frame with multiple columns in ggplot2?如何在 ggplot2 中绘制具有多列的 data.frame?
【发布时间】:2016-07-12 08:25:00
【问题描述】:

我有一个大致如下所示的数据框:

aa <- c(1:7)
bb <- c(11:15)
df1 <- expand.grid(aa, bb)
val1 <- rnorm(nrow(df1))
val2 <- runif(nrow(df1))

df <- data.frame(df1, val1, val2)
names(df) <- c("aa", "bb", "val1", "val2")

我想要做什么:对于固定的 aa(比如 1),对于 bb 的所有值,都有一个 val1 和 val2 的时间序列。现在,我想绘制这些(对于 aa = 1,对于每个 val1 和 val2,这些是 5)时间序列。 (所以总共 7*5*2 时间序列)

如何用 ggplot2 做到这一点?

我尝试了以下方法:

require(ggplot2)
require(reshape2)

df_pl <- melt(df,  id.vars = c("aa", "bb"), variable.name = 'val')

ggplot(df_pl, aes(aa, value)) + geom_point(aes(colour = val))
ggplot(df_pl, aes(bb, value)) + geom_point(aes(colour = val))

但这只会产生 val1 和 val2 作为 aa 和 bb 的函数的图,而不是每个 bb 值的 val1 / val2 系列的图。我可能使用不正确的 melt 功能

【问题讨论】:

  • 这样的? ggplot(df_pl, aes(x=(interaction(bb, aa)), y=value, colour = val)) + geom_point()
  • @Jimbou 嗯,这为 aa 和 bb 的所有组合绘制了所有 val1val2。我想做的是说aa = 1,绘制val1val2的时间序列作为bb的函数,然后对aa = 2做同样的事情,依此类推。所以应该绘制 7*5 的 val1 时间序列和 7*5 的 val2 时间序列

标签: r plot ggplot2 reshape melt


【解决方案1】:

我不确定我是否正确理解了您,这就是您想要实现的目标,但也许可以尝试:

ggplot(df_pl, aes(aa, value)) + geom_point(aes(colour = val)) + facet_wrap(~bb)
ggplot(df_pl, aes(bb, value)) + geom_point(aes(colour = val)) + facet_wrap(~aa)

【讨论】:

  • 谢谢,这走向了正确的方向,有点难以解释我想要做什么。所以这绘制了几个面板,我希望将所有内容都放在一个面板中,但对不同的 bb 值(在第一种情况下)或 aa 值(在第二种情况下)使用不同的颜色
  • 那么ggplot(df_pl, aes(bb, value)) + geom_point(aes(colour = factor(aa)))?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-02-17
  • 2013-08-01
  • 2013-03-25
  • 2016-05-14
相关资源
最近更新 更多