如何从R中的3列制作单个直方图?

时间:2017-11-07 16:17:55

标签: r ggplot2 histogram

这是我第一次使用ggplot2。我有一个3列的表,我想在一个图中绘制所有三列的频率分布。我之前只使用了hist(),所以我在这个ggplot2上有点迷失了。这是我的表的一个例子。制表符分隔表,包含3列A,B,C标题。

A         B           C
1.38502   1.38502     -nan
0.637291  0.753084    1.55556
0.0155242 0.0164394   -nan
3.29355   1.15757     -nan
1.00254   1.10108     0.132039
0.0155424 0.0155424   nan
0.760261  0.681639    0.298851
1.21365   1.21365     -nan
1.216      1.22541    -nan
0.61317   0.738528    0.585657
0.618276  0.940312    0.820591
1.96779   1.31051     1.58609
0.725413  2.29621     1.78989
0.684681  0.67331     0.290221

我通过查找类似的帖子使用了以下代码但最终出现了错误。

library(ggplot2)

dnds <- read.table('dNdS_plotfile', header =TRUE)

ggplot(data=dnds, melt(dnds), aes_(value, fill = L1))+ 
        geom_histogram()
  

错误:没有id变量;使用all作为度量变量

     

错误:应使用aes()或aes _()创建映射。

我真的迷失了如何解决这个错误。我想要一个带有三个不同颜色直方图的图形,这些图形在我的最终图中没有重叠。请帮我实现这个目标。谢谢。

1 个答案:

答案 0 :(得分:1)

这应该可以实现您的目标。我喜欢加载tidyverse包,它加载了一堆有用的包,比如ggplot2和dplyr。

geom_histogram()中,您可以使用参数 binwidth()指定直方图的绑定宽度,或使用 bins()。如果您还希望不堆叠条形,则可以使用参数 position =“dodge”

请参阅此处的文档:http://ggplot2.tidyverse.org/reference/geom_histogram.html

library(tidyverse)

data <- read.table("YOUR_DATA", header = T)

graph <- data %>% 
  gather(category, value)

ggplot(graph, aes(x = value, fill = category)) +
  geom_histogram(binwidth = 0.5, color = "black")

enter image description here