提问者:小点点

从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

然后我发现了一个类似的问题,我发现我可以通过以下方式实现我的目标:

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

我阅读了ggplot帮助文档,有以下问题:

  • why i got error when i claim dataset in either ggplot() or geom_histogram(),like ggplot(data=rivers)? Help docs indicates a vector will be coerced to a data frame by default and a dataset must be specified. My assumption is that when a dataset is not specified, the function will search for global environment?
  • why it works when i call aes(rivers) independently or in geom_histogram() but i got error when i put it in gglot(). why the location of aes(rivers) matters in this case?
    ggplot(aes(rivers))+geom_histogram()
    Error: ggplot2 doesn't know how to deal with data of class uneval
    

共2个答案

匿名用户

错误的原因是河流是一个矢量

ggplot(aes(rivers))+
               geom_histogram()

错误:ggplot2不知道如何处理类uneval的数据。您是否意外地将aes()的结果提供给data参数?

将其转换为数据。帧,然后它就可以工作了

library(ggplot2)
library(dplyr)
data_frame(val = rivers) %>%
          ggplot(., aes(val)) + 
                geom_histogram()
set.seed(24)
rivers <- sample(700:1700, 150)

匿名用户

如果您没有明确地为ggplot提供参数名称,则会将值分配给错误的ggplot参数(按顺序排列的第一个参数是dataarg)。参数顺序可在相关函数帮助页上查看:

?ggplot 

数据=NULL,映射=aes(),环境=parent.frame()

因此,当您提供aes()给ggfield而不指定参数名称时,就像您执行以下操作一样:

ggplot(data = aes(rivers)) + geom_histogram()

因为data参数不允许这种数据类型-你得到一个错误。

ggplot(mapping = aes(rivers)) + geom_histogram()