28

我正在尝试生成条形图,但 y 轴刻度太短。这是我的代码:

barplot(as.matrix(dat), log="y", ylim=c(10000,100000000), beside=TRUE,
        ylab = "Number of reads", col = c("gray","black","white"))

短y轴

它为轴留出了空间(根据 ylim),但没有填充实际的轴。我已经通过?barplot并尝试了一些事情(从谷歌搜索我认为xpd = F, yaxs = c(10000,10000000,5)应该工作,但它没有)。

我知道这是一件小事,但这正是我多年来一直困扰的问题,而不是实际工作,所以任何帮助将不胜感激!

编辑:为输入的家伙干杯!

我最初确实在没有 ylim 的情况下绘图,但它最终得到了一个更奇怪的轴(同样的问题);我实际上选择了我的 ylim 值来给它一个更好的间隔轴。 原版没有ylim

这是数据:

dat <- read.table(text="D2,D3n,D3m,D4n,D4m
21234722,34262282,31920464,25486357,20712943
35343,64403,22537,39934,46547
126646,312286,101105,81537,76944", header=TRUE, sep=",")

编辑 2:@DWin 说得对 - 我更新了我的 R,现在它绘制得很好 - 谢谢大家!

4

3 回答 3

34

我看到您尝试设置ylim,但您给出了错误的值。这将改变绘图的比例(如缩放)。例如看到这个:

par(mfrow=c(2,1))
tN <- table(Ni <- stats::rpois(100, lambda = 5))
r <- barplot(tN, col = rainbow(20),ylim=c(0,50),main='long y-axis')
r <- barplot(tN, col = rainbow(20),main='short y axis')

在此处输入图像描述 另一种选择是不使用轴进行绘图并使用axisand手动设置它们usr

require(grDevices) # for colours
par(mfrow=c(1,1))
r <- barplot(tN, col = rainbow(20),main='short y axis',ann=FALSE,axes=FALSE)
usr <- par("usr")
par(usr=c(usr[1:2], 0, 20))
axis(2,at=seq(0,20,5))

在此处输入图像描述

于 2013-04-20T15:44:30.513 回答
13

最简单的解决方案似乎是指定ylim范围。这是一些自动执行此操作的代码(左侧默认,右侧 - 调整):

# default y-axis
barplot(dat, beside=TRUE)

# automatically adjusted y-axis
barplot(dat, beside=TRUE, ylim=range(pretty(c(0, dat))))

图像

诀窍是使用pretty()which 返回涵盖所提供数据的所有值的间隔中断列表。它保证最大返回值是 1) 一个整数 2) 大于数据中的最大值。

在示例中还添加了 0,以pretty(c(0, dat))确保轴从 0 开始。

于 2018-05-05T20:37:58.387 回答
-4
barplot(data)

在此处输入图像描述

barplot(data, yaxp=c(0, max(data), 5))

在此处输入图像描述

yaxp=c(minY-axis, maxY-axis, Interval)

于 2016-08-20T12:35:01.433 回答