将线图转换为条形图

时间:2011-03-31 02:26:40

标签: r plot

我已经生成了三个线图,但数据并不是真正连续的,所以我想生成等效的条形图,但我的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'))

这是输出(点击放大)。

average misclassifications

由于所有其他情节都是用直线R生成的,从外观和感觉的角度来看,我更喜欢不使用像ggplot这样的库的解决方案,尽管我会接受任何建议我可以得到。

2 个答案:

答案 0 :(得分:1)

好吧,如果您决定使用ggplot2包:

此代码

library(ggplot2)
dat$depth <- factor(dat$depth)

p <- ggplot(dat, aes(x=depth, y=average, fill=classifier)) + geom_bar()
print(p)

将产生:

enter image description here

和这段代码:

p <- ggplot(dat, aes(x=depth, y=average, fill=classifier)) + geom_bar(stat="identity", position="dodge")
print(p)

会产生这个:

enter image description here

答案 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')
)