从融化的数据框中绘制等高线图

时间:2019-08-09 07:05:14

标签: r ggplot2 reshape2 melt

我有一个数据集,它是时间和频率的函数。当我融化它时,我想保留实际时间(日期)和频率值,因为我想要一个二维图,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轴标签。有什么解决方法吗? 谢谢

1 个答案:

答案 0 :(得分:0)

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

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()

这只是猜测,因为您没有向我们提供完整的代表可演绎的示例示例。在此处how to ask a good questionhow to give a reproducible example

张贴问题时,请阅读并遵循这些指南。