R语言 从熔化的铝合金中绘制等高线图

lskq00tm  于 2023-11-14  发布在  其他
关注(0)|答案(1)|浏览(104)

我有一个数据集,它是时间和频率的函数。当我融化它时,我想保留实际的时间(日期)和频率值,因为我想用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轴标签。

deyfvvtc

deyfvvtc1#

原则上,您必须手动更改轴标签:

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它只是将第一个级别Map到1,第二个级别Map到2,依此类推。但是你希望它Map到字符串表示的数字。在这种情况下,应该这样做:

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

相关问题