通过ggplot2在r中绘制矢量直方图

时间:2017-10-23 03:17:20

标签: r ggplot2

我想通过ggplot 2从矢量绘制直方图。 数据集是来自数据集包的河流

rivers
  [1]  735  320  325  392  524  450 1459  135  465  600  330  336  280  315  870  906  202  329
 [19]  290 1000  600  505 1450  840 1243  890  350  407  286  280  525  720  390  250  327  230
 [37]  265  850  210  630  260  230  360  730  600  306  390  420  291  710  340  217  281  352
 [55]  259  250  470  680  570  350  300  560  900  625  332 2348 1171 3710 2315 2533  780  280
 [73]  410  460  260  255  431  350  760  618  338  981 1306  500  696  605  250  411 1054  735
 [91]  233  435  490  310  460  383  375 1270  545  445 1885  380  300  380  377  425  276  210
[109]  800  420  350  360  538 1100 1205  314  237  610  360  540 1038  424  310  300  444  301
[127]  268  620  215  652  900  525  246  360  529  500  720  270  430  671 1770

起初我尝试了这些但是没有工作:

> ggplot(rivers,aes(rivers))+geom_histogram()
Error: ggplot2 doesn't know how to deal with data of class numeric
> ggplot(rivers)+geom_histogram(aes(rivers))
Error: ggplot2 doesn't know how to deal with data of class numeric

然后我找到了a similar question,并发现我可以通过以下方式实现我的目标:

ggplot()+aes(rivers)+geom_histogram()
or
ggplot()+geom_histogram(aes(rivers))

我阅读了ggplot帮助文档,并提出以下问题:

  • 为什么我在ggplot()或geom_histogram()中声明数据集时出错,比如ggplot(data = rivers)?帮助文档表示默认情况下矢量将被强制转换为数据框,并且必须指定数据集。我的假设是,当未指定数据集时,该函数将搜索全局环境?
  • 为什么当我独立地或在geom_histogram()中调用aes(河流)时它起作用但是当我把它放在gglot()中时我得到了错误。为什么aes(河流)的位置在这种情况下很重要?
    ggplot(aes(rivers))+geom_histogram()
    Error: ggplot2 doesn't know how to deal with data of class uneval
    

3 个答案:

答案 0 :(得分:4)

错误的原因是riversvector

ggplot(aes(rivers))+
               geom_histogram()
  

错误:ggplot2不知道如何处理class uneval的数据。难道   您不小心将aes()的结果提供给data   参数

将其转换为data.frame,然后就可以了

library(ggplot2)
library(dplyr)
data_frame(val = rivers) %>%
          ggplot(., aes(val)) + 
                geom_histogram()

数据

set.seed(24)
rivers <- sample(700:1700, 150)

答案 1 :(得分:0)

试试这个

fortify.numeric <- function (model, data, ...) data.frame(model)

答案 2 :(得分:0)

如果您想手动控制垃圾箱的数量:

ggplot() +
    geom_histogram(aes(x = rivers, y = ..density..), bins = 10)

或者,如果您不这样做:

ggplot() +
    geom_histogram(aes(x = rivers, y = ..density..))