【问题标题】:Plotting contour plots from melted dataframes从融化的数据框中绘制等高线图
【发布时间】:2019-08-09 07:05:14
【问题描述】:

我有一个数据集,它是时间和频率的函数。当我融化它时,我想保留实际时间(日期)和频率值,因为我想要一个以 y 轴为频率、x 轴为时间的二维图。

我试图保留一列所需的轴值,但熔化使其成为因素,并且 stat_contour 抛出错误。 我的数据类似于以下内容

   a = data.frame(date=time,power=power)
   names(a) = c('date',period)

句号在哪里

  [1]   8   8   8   8   8   8   8   8   8   8   8   8   8   8   8   8   8   8   8   8   8   8
 [23]   8   8   8   8   8   8   8   8   8   8   8   8   8   8   8   8   8   8   8   8   8   8
 [45]   8   8   8   8   8   8  16  16  16  16  16  16  16  16  16  16  16  16  16  16  16  16
 [67]  16  16  16  16  16  16  16  16  16  16  16  16  16  16  16  16  16  16  16  16  16  16
 [89]  16  16  16  16  16  16  16  16  16  16  16  16  32  32  32  32  32  32  32  32  32  32
[111]  32  32  32  32  32  32  32  32  32  32  32  32  32  32  32  32  32  32  32  32  32  32
[133]  32  32  32  32  32  32  32  32  32  32  32  32  32  32  32  32  32  32  64  64  64  64
[155]  64  64  64  64  64  64  64  64  64  64  64  64  64  64  64  64  64  64  64  64  64  64
[177]  64  64  64  64  64  64  64  64  64  64  64  64  64  64  64  64  64  64  64  64  64  64
[199]  64  64 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128
[221] 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128
[243] 128 128 128 128 128 128 128 128 256
power = melt(a,id.vars = 'date')

       date period      power
1 850-01-01      8 0.05106766
2 851-01-01      8 0.05926821
3 852-01-01      8 0.06783015
4 853-01-01      8 0.07681627
5 854-01-01      8 0.08636516
6 855-01-01      8 0.09667054

ggplot(power, aes(x = date, y = period, z = power)) +
  stat_contour()

这会产生错误,因为周期列是一个因素;如果我将其设为数字​​,我会丢失确切的 Y 轴标签。有什么解决方法吗? 谢谢

【问题讨论】:

    标签: r ggplot2 reshape2 melt


    【解决方案1】:

    您没有提供可重现的示例,但原则上您必须手动更改轴标签:

    library(ggplot2)
    d <- expand.grid(x = 1:100, y = paste("P", 1:100))
    d$z <- rnorm(10000)
    
    ggplot(d, aes(x, as.numeric(y), z = z)) + 
       geom_contour() +
       scale_y_continuous(breaks = seq_along(levels(d$y)), breaks = levels(d$y))
    

    但是,我发现要真正理解一个轴为定性的等高线图应该代表什么有点困难。我的猜测是你的 y 轴是一个因素,因为熔化操作,并且有一些列被错误地指定为因素,因此整个列是一个因素,而实际上它应该是一个数字(也就是说它显示 8,应该表示 8 但实际上是 8 级的因子)。

    如果是这种情况,正常的as.numeric 不能按预期工作 b/c 它只是将第一级映射到 1,第二级映射到 2,依此类推。但是您希望它映射到字符串表示的数字。在这种情况下,这样的事情应该可以工作:

    library(ggplot2)
    d <- expand.grid(x = 1:100, y = sample(1000, 100)) # y should be a numeric but is a factor
    d$z <- rnorm(10000)
    
    ggplot(d, aes(x, as.numeric(as.character(y)), z = z)) + 
       geom_contour()
    

    然而,这一切都是猜测,因为您没有向我们提供完整的repr可理解的ex样本。以后在how to ask a good questionhow to give a reproducible example 发布问题时,请阅读并遵循这些指导方针

    【讨论】:

      猜你喜欢
      • 2018-01-23
      • 2012-03-14
      • 1970-01-01
      • 2021-05-19
      • 1970-01-01
      • 2021-04-03
      • 1970-01-01
      • 1970-01-01
      • 2014-07-24
      相关资源
      最近更新 更多