如何从R中的数据帧创建直方图

时间:2017-04-23 18:09:53

标签: r histogram

我想从数据框创建直方图,但每次使用代码时都会收到错误'x' must be numeric

    df <- data.frame(col1 = c(10, 20, 30, 40, 50, 60, 70, 80, 90, 100, 110, 120),
    col2 = c(10, 21, 31, 41, 51, 61, 72, 82, 92, 104, 114, 134))

    hist(df)

4 个答案:

答案 0 :(得分:3)

你可以做到

hist(df$col1)

with(df, hist(col2))

如果您希望所有列都在自己的直方图中,您可以执行类似

的操作
par(mfrow=c(2,1))
histout=apply(df,2,hist)

答案 1 :(得分:1)

如果您想要所有数据的直方图,可以使用

hist(c(df$col1,df$col2))

答案 2 :(得分:0)

我建议使用ggplot库 这是一个例子

generateHistogram  <- function(columnName) {
  #I used library(ggplot2)
  houseDFPlot <- ggplot(data=DF, aes(x=DF[columnName]))
  #layering
  houseDFPlot + geom_histogram()
}

答案 3 :(得分:-1)

请考虑您的示例的其他可视化,因为直方图可能不是最好的比较col1和col2中非常相似的数据。 在您的情况下,将您的df首先转换为整洁的格式

会很有用
library(ggplot2)
library(tidyr)

df_tidy <- gather(df, cols, value) 

然后使用以下图表之一突出显示数据中的微小差异:

作为密度图表:

ggplot(df_tidy, aes(x = value)) + 
  geom_density(aes(color=cols))

或散点图:

ggplot(df_tidy, aes(x = value, y=cols)) + 
  geom_point(aes(color=cols), size=3) +
  scale_x_continuous(breaks = c(0,25,50,75,100,125))

或boxplot:

ggplot(df_tidy, aes(x = cols, y=value)) + 
  geom_boxplot(aes(fill=cols))