尝试使用z轴的ggplot2的stat_contour和geom_contour抛出错误

时间:2016-03-09 00:24:17

标签: r ggplot2

成功运行

我可能不理解这些期望,但是,如果我按照stat_contour's documentation的例子,我成功地获得了:

# Generate data
library(reshape2) # for melt
volcano3d <- melt(volcano)
names(volcano3d) <- c("x", "y", "z")

# Basic plot
v <- ggplot(volcano3d, aes(x, y, z = z))
v + stat_contour()

导致:

proper stat_contour plot

运行不成功

但是,当我尝试使用完全相同的数据类型 执行 完全相同的操作时,我有错误:

my_plt <- ggplot(diamonds, aes(depth, carat, z=price))
my_plt + stat_contour()

的产率:

Warning message:
Computation failed in `stat_contour()`:
(list) object cannot be coerced to type 'double' 

调试尝试

我能想象的唯一潜在差异,特别是我收到的错误,是对象类型的差异。所以,这里有一些细节:

  • volcano3d

    head(volcano3d)
    
      x y   z
    1 1 1 100
    2 2 1 101
    3 3 1 102
    4 4 1 103
    5 5 1 104
    6 6 1 105
    

    和...

    volcano3d %>% sapply(class)
         x         y         z 
    "integer" "integer" "numeric" 
    
  • diamonds

    diamonds %>% select(depth, carat, price) %>% head
    Source: local data frame [6 x 3]
    
      depth carat price
      (dbl) (dbl) (dbl)
    1  61.5  0.23   326
    2  59.8  0.21   326
    3  56.9  0.23   327
    4  62.4  0.29   334
    5  63.3  0.31   335
    6  62.8  0.24   336
    

    和...

    diamonds %>% select(depth, carat, price) %>% sapply(class)
        depth     carat     price 
    "numeric" "numeric" "numeric" 
    

我看不出有什么理由可以解决这些错误。任何想法??

编辑和更新

根据Gregor的评论,似乎他是正确的:

  • stat_contour函数只能处理x和y维度中的常规数据区间。

例如,如果我们查看volcano3d,x&amp; y图的尺寸完全&#34;常规&#34;:

volcano3d[seq(1,101,10),]

     x y   z
1    1 1 100
11  11 1 109
21  21 1 122
31  31 1 114
41  41 1 107
51  51 1 115
61  61 1 113
71  71 1 114
81  81 1  99
91   4 2 103
101 14 2 113
  • 在每个轴上,它遵循1,2,3,...
  • 的完整序列

我很少有这种常规格式的数据。这使得该功能在应用中相当有限。虽然我认为数据可以聚合,分箱,然后在两个轴上重新投入数字格式,以允许进行一些偷工减料的尝试。

哦,好吧!我总是可以使用geom_raster做一些几乎相同的事情,只是使用不同的可视化。

谢谢!

0 个答案:

没有答案