我已经生成了三个线图,但数据并不是真正连续的,所以我想生成等效的条形图,但我的R知识非常缺乏。
我有以下数据。
> dat
classifier depth average
1 bayes 0 3.5639098
2 bayes 1 6.0000000
3 bayes 2 3.0253165
4 bayes 3 5.2250000
5 bayes 4 1.7931034
6 bayes 5 2.6800000
7 bayes 6 3.6551724
8 adaboost 0 9.2857143
9 adaboost 1 0.9733333
10 adaboost 2 0.4050633
11 adaboost 3 0.4750000
12 adaboost 4 0.3448276
13 adaboost 5 0.6000000
14 adaboost 6 0.4137931
15 randomforest 0 7.0375940
16 randomforest 1 0.8000000
17 randomforest 2 0.7341772
18 randomforest 3 1.2750000
19 randomforest 4 0.3103448
20 randomforest 5 0.3600000
21 randomforest 6 0.3448276
我使用以下代码生成图表。
dat <- read.table('depth_errors.data', sep=',',header=T)
plot(0,0,xlim=c(0,6),ylim=c(0,10),xlab='depth',
ylab='average misclassifications',type='n')
# Change the stroke
lines(dat[dat$classifier=='bayes',][,-1])
lines(dat[dat$classifier=='adaboost',][,-1],lty='dashed')
lines(dat[dat$classifier=='randomforest',][,-1],lty='dotted')
legend('topright', c('Naive Bayes', 'AdaBoost', 'Random Forest'),
lty=c('solid','dashed','dotted'))
这是输出(点击放大)。
由于所有其他情节都是用直线R生成的,从外观和感觉的角度来看,我更喜欢不使用像ggplot
这样的库的解决方案,尽管我会接受任何建议我可以得到。
答案 0 :(得分:1)
好吧,如果您决定使用ggplot2包:
此代码
library(ggplot2)
dat$depth <- factor(dat$depth)
p <- ggplot(dat, aes(x=depth, y=average, fill=classifier)) + geom_bar()
print(p)
将产生:
和这段代码:
p <- ggplot(dat, aes(x=depth, y=average, fill=classifier)) + geom_bar(stat="identity", position="dodge")
print(p)
会产生这个:
答案 1 :(得分:0)
感谢@k_jacko,除了x轴上的标签外,这就是我所追求的。
mat <- matrix(dat$average, nrow=3, byrow=T)
barplot(
mat,
ylim=c(0,10),
xlab='depth',
names.arg=levels(factor(dat$depth)),
ylab='average misclassifications',
beside=TRUE,
legend.text=c('Naive Bayes', 'AdaBoost', 'Random Forest')
)