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

Yin*_*Yin 4 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
Run Code Online (Sandbox Code Playgroud)

起初我尝试了这些但没有用:

> 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
Run Code Online (Sandbox Code Playgroud)

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

ggplot()+aes(rivers)+geom_histogram()
or
ggplot()+geom_histogram(aes(rivers))
Run Code Online (Sandbox Code Playgroud)

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

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

Geo*_*sky 6

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

?ggplot 
Run Code Online (Sandbox Code Playgroud)

ggplot(data = NULL, mapping = aes(), ..., environment = parent.frame())

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

ggplot(data = aes(rivers)) + geom_histogram()
Run Code Online (Sandbox Code Playgroud)

因为data参数不允许这种数据类型 - 你会得到一个错误。提供正确的参数名称可以解决问题:

ggplot(mapping = aes(rivers)) + geom_histogram()
Run Code Online (Sandbox Code Playgroud)


akr*_*run 5

错误的原因riversvector.

ggplot(aes(rivers))+
               geom_histogram()
Run Code Online (Sandbox Code Playgroud)

错误:ggplot2 不知道如何处理 uneval 类的数据。aes()您是否不小心提供了论证的结果data

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

library(ggplot2)
library(dplyr)
data_frame(val = rivers) %>%
          ggplot(., aes(val)) + 
                geom_histogram()
Run Code Online (Sandbox Code Playgroud)

数据

set.seed(24)
rivers <- sample(700:1700, 150)
Run Code Online (Sandbox Code Playgroud)