【问题标题】:Plotting multiple columns of df using ggplot [duplicate]使用ggplot绘制df的多列[重复]
【发布时间】:2016-06-02 22:01:43
【问题描述】:

这个问题类似于r - data frame of lists into a data frame,但没有一个答案真的足够。

我有一个df 的时间序列数据,将建模数据与量具数据进行比较。有关数据的子部分,请参见下文:

Date        GageFlow  base0      1a       1b       2a        2b       3a       
2003-10-01     78.6 72.43154 64.55318 64.55318 64.55318 64.55318 64.55318 
2003-10-02     88.6 74.94789 68.48789 68.48789 68.48789 68.48789 68.48789 
2003-10-03     96.6 75.08756 69.75530 69.75530 69.75530 69.75530 69.75530 
2003-10-04     93.1 74.45323 66.67482 66.67482 66.67482 66.67482 66.67482 
2003-10-05     90.2 72.89045 65.24120 65.24120 65.24120 65.24120 65.24120 
2003-10-06     96.0 73.89078 67.88296 67.88296 67.88296 67.88296 67.88296 

我的数据str是:

'data.frame':   3653 obs. of  11 variables:
 $ Date    : Date, format: "2003-10-01" "2003-10-02" ...
 $ GageFlow: num  78.6 88.6 96.6 93.1 90.2 96 96 97.8 98.7 99.8 ...
 $ base0   :'data.frame':   3653 obs. of  1 variable:
  ..$ base0: num  72.4 74.9 75.1 74.5 72.9 ...

我想使用ggplot 绘制带有geom_lines(base0、1a、1b 等)和GageFlow 的建模场景图,以及x-axis正如timeseries (x=Date) 提供的那样。问题是当我使用melt 尝试以高格式获取它时,我收到一个错误:

错误:无法熔化具有非原子“测量”列的 data.frames 另外:警告信息: 跨度量变量的属性不相同;他们将被丢弃

我是否真的需要重组我的df 或者有什么方法可以修改melt,或者使用其他函数来生成这样的情节。当然,我可以做到这一点,但我正在努力提高效率。

谢谢!

【问题讨论】:

  • 你能用dput(head(df))的结果编辑吗?结构在这里很重要,这是保存它的最佳方式。
  • 问题是变量base0的类是data.frame。如果将其更改为数字向量,它应该可以正常工作。

标签: r ggplot2 dataframe melt


【解决方案1】:

要解决这个问题,你必须转换base0 变量。

str(df)
## 'data.frame':    6 obs. of  8 variables:
##  $ Date    : Date, format: "2003-10-01" ...
##  $ GageFlow: num  78.6 88.6 96.6 93.1 90.2 96
##  $ base0   :'data.frame':    6 obs. of  1 variable:
##   ..$ df$base0: num  72.4 74.9 75.1 74.5 72.9 ...

# Alternatively, you can use df$base0 <- df$base0[, 1]
# if you only have few columns which classes are data.frame
df[] <- lapply(df, unlist)

str(df)
## 'data.frame':    6 obs. of  8 variables:
##  $ Date    : Date, format: "2003-10-01" ...
##  $ GageFlow: num  78.6 88.6 96.6 93.1 90.2 96
##  $ base0   : num  72.4 74.9 75.1 74.5 72.9 ...

df <- melt(df, "Date")
ggplot(df, aes(x=Date, y=value, color=variable)) + geom_line()

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-11-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-01-24
    • 2021-06-06
    • 2019-03-18
    • 2019-03-13
    相关资源
    最近更新 更多