我想从数据框创建直方图,但每次使用代码时都会收到错误'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)
答案 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))