如何更改R中小数点的y轴限制?

时间:2018-12-27 14:32:43

标签: r

我可以在Excel中绘制barplot,并在y轴范围内用小数点表示,如下所示。

Graph1

但是我将无法更改R中的y轴限制。

Graph2

这是我在R中的代码。

par(mfrow=c(1, 1), mar=c(7, 4, 5, 6))
mydata <- data.frame(Algorithm1=c(95.85, 96.94), Algorithm2=c(96.04, 96.84), Algorithm3=c(95, 95.30))
barplot(as.matrix(mydata), main="Precision", ylim=range(0:100),  
        beside=T, col=c("red", "blue"), las=1, border = 0, cex.lab=1, cex.axis=1, font=1,col.axis="black", ylab = "Percentage",
        legend.text = c("X1",   "X2"),
        args.legend = list(x ='topright', bty='n', inset=c(-0.20,0)))

预先感谢您的回答。

3 个答案:

答案 0 :(得分:4)

您还可以使用ggplot2和刻度。

library(dplyr)
library(ggplot2)
library(scales)
mydata <- data.frame(Algorithm = rep(c('Algorithm1','Algorithm2','Algorithm3'), each=2),
                     variable_x = rep(c('X1','X2'),3), 
                     values=c(0.9585, 0.9694,0.9604, 0.9684, 0.95, 0.9530))

mydata %>% 
  ggplot(aes(x=Algorithm,y=values,fill=variable_x))+
  geom_bar(stat='identity', position='dodge')+
  scale_y_continuous(labels = scales::percent, limits = c(0.94,0.975), oob = rescale_none)+ 
  scale_fill_manual(values= c(X1='red',X2='blue'))

答案 1 :(得分:1)

设置y和 xpd = FALSE 的限制。

  • FALSE:所有绘图都剪切到绘图区域
  • TRUE:所有绘图都裁剪到图形区域
  • NA:所有绘图都裁剪到设备区域

library(RColorBrewer)
color <- brewer.pal(3, "Set1")[2:1]
plot.new()
plot.window(xlim = c(0, 10), ylim = c(94, 97.5), yaxs = "i")
abline(h = seq(94, 97.5, 0.5), col = 8)
barplot(as.matrix(mydata), beside = T, col = color,
        border = NA, legend.text = c("X1",   "X2"),
        args.legend = list(x = 'topright', bty = "n"), xpd = F, add = T)

enter image description here

答案 2 :(得分:0)

您可以这样做:

tickPoints <- 20 * (0:5)

par(mfrow = c(1, 1), mar = c(7, 4, 5, 6))
mydata <- data.frame(
  Algorithm1 = c(95.85, 96.94), 
  Algorithm2 = c(96.04, 96.84),
  Algorithm3 = c(95, 95.30)
)

barplot(
  as.matrix(mydata), main = "Precision", beside = T, col = c("red", "blue"),
  las = 1, border = 0, cex.lab = 1, cex.axis = 1, font = 1, col.axis = "black",
  ylab = "Percentage", legend.text = c("X1",   "X2"), 
  args.legend = list(x = 'topright', bty = 'n',inset = c(-0.20, 0)),
  axes = FALSE,
  ylim = range(tickPoints)
)

axis(side = 2, at = tickPoints, labels = sprintf("%0.1f", tickPoints))

请注意axes = FALSE的通话中的barplot