我想用ggplot2做一个非常简单的直方图。我有以下MWE:
library(ggplot2)
mydf <- data.frame(
Gene=c("APC","FAT4","XIRP2","TP53","CSMD3","BAI3","LRRK2","MACF1",
"TRIO","SETD2","AKAP9","CENPF","ERBB4","FBXW7","NF1","PDE4DIP",
"PTPRT","SPEN","ATM","FAT1","SDK1","SMG1","GLI3","HIF1A","ROS1",
"BRDT","CDH11","CNTRL","EP400","FN1","GNAS","LAMA1","PIK3CA",
"POLE","PRDM16","ROCK2","TRRAP","BRCA2","DCLK1","EVC2","LIFR",
"MAST4","NAV3"),
Freq=c(48,39,35,28,26,17,17,17,16,15,14,14,14,14,14,14,14,14,13,
13,13,13,12,12,12,11,11,11,11,11,11,11,11,11,11,11,11,10,10,10,
10,10,10))
mydf
ggplot(mydf, aes(x=Gene)) +
geom_histogram(aes(y=Freq),
stat="identity",
binwidth=.5, alpha=.5,
position="identity")
我一直使用这个简单的代码来生成这种直方图。
事实上,我有一段时间以前制作的这个特例的情节......
但是,现在我运行完全相同的代码,我收到以下错误:
错误:未知参数:binwidth,bin,pad
为什么我现在而不是之前发现此错误,这是什么意思?
非常感谢!
答案 0 :(得分:1)
geom_histogram()不再是绘制离散值计数的最合适方式。
如果您预先计算了频率值,请使用geom_col(),然后所有错误都将消失。
library(ggplot2)
mydf <- data.frame(
Gene=c("APC","FAT4","XIRP2","TP53","CSMD3","BAI3","LRRK2","MACF1",
"TRIO","SETD2","AKAP9","CENPF","ERBB4","FBXW7","NF1","PDE4DIP",
"PTPRT","SPEN","ATM","FAT1","SDK1","SMG1","GLI3","HIF1A","ROS1",
"BRDT","CDH11","CNTRL","EP400","FN1","GNAS","LAMA1","PIK3CA",
"POLE","PRDM16","ROCK2","TRRAP","BRCA2","DCLK1","EVC2","LIFR",
"MAST4","NAV3"),
Freq=c(48,39,35,28,26,17,17,17,16,15,14,14,14,14,14,14,14,14,13,
13,13,13,12,12,12,11,11,11,11,11,11,11,11,11,11,11,11,10,10,10,
10,10,10), stringsAsFactors = FALSE)
mydf
ggplot(mydf, aes(x=Gene, y=Freq)) +
geom_col() +
scale_x_discrete(limits = mydf$Gene)
注意:还需要将Gene列定义为不是因子而使用scale_x_discrete()以避免x轴的字母顺序。
答案 1 :(得分:-5)
我宁愿使用dplyr
(管道运算符)来清楚地理解代码:
mydf %>% #my data frame
as.data.frame %>% #if mydf is not a dataframe
ggplot(aes(x = Var, y = n))
+ geom_bar( aes(y = n), stat = "identity", position = "identity")