在条形图期间r中的对数刻度误差

时间:2017-03-03 10:35:29

标签: r

我必须在R中绘制一个条形图。以下是数据

mime_doc$FREQ_PCNT
[1] 97.89  10.19  1.34  3.50  5.01  0.02  0.00  0.04
> mime_doc$BYTE_PCNT
[1] 90.72  19.82  0.70  5.64  0.05  0.04  0.01  0.01

以下是barplot的命令

mime_freq = data.frame(mime_doc$FREQ_PCNT, mime_doc$BYTE_PCNT)
barplot(t(mime_freq), beside = TRUE, col = c('blue','red') log = 'y')

它出现以下错误

Error in barplot.default(mime_doc$FREQ_PCNT, beside = TRUE, col = c("blue",  : 
  log scale error: at least one 'height + offset' value <= 0

问题出在哪里?

1 个答案:

答案 0 :(得分:1)

mime_doc$FREQ_PCNT的第七个值为零,因此在对数刻度上绘图没有意义。你可以通过几种方式解决这个问题。

将其替换为NA

mime_doc<- data.frame(FREQ_PCNT=c(97.89, 10.19, 1.34, 3.50, 5.01, 0.02, NA, 0.04), BYTE_PCNT=c(90.72, 19.82, 0.70, 5.64, 0.05, 0.04, 0.01 , 0.01)) mime_freq = data.frame(mime_doc$FREQ_PCNT, mime_doc$BYTE_PCNT) barplot(t(mime_freq), beside = TRUE, col = c('blue','red'), log = 'y')

现在你没有得到零值的标准,这似乎是最明智的可视化方式,但这可能取决于你想用图表传达的内容。

使用偏移量

mime_doc<- data.frame(FREQ_PCNT=c(97.89, 10.19, 1.34, 3.50, 5.01, 0.02, 0.00, 0.04), BYTE_PCNT=c(90.72, 19.82, 0.70, 5.64, 0.05, 0.04, 0.01 , 0.01)) mime_freq = data.frame(mime_doc$FREQ_PCNT, mime_doc$BYTE_PCNT) barplot(t(mime_freq), beside = TRUE, col = c('blue','red'), log = 'y', offset=0.0001)

这种方法的缺点是偏移的选择是任意的,并且会对绘图的整体缩放产生影响。偏移量应远小于最小非零值,以避免扭曲图形。

有关偏移的工作原理,请参阅?boxplot