繁体   English   中英

R在y轴上改变比例格式

[英]R changing format of scale on y-axis

我有一个分别在y和x轴上有$ -amounts和日期的图。 目前,美元金额从0-15百万美元不等。 像这样的东西:

x <- rnorm(20)^2 * 1000000
plot(x)

R确实像'1.0e+07'而不是'10,000,000'并且还垂直定向文本而不是水平定向文本。

我的问题是:

1)如何将缩放文本设置为水平方向?

2)我如何让R使用10MM代替'10,000,000''1.0e+07'

1)请参阅?optionsscipen选项,这是对使用科学记数法的惩罚。 为了更好地控制,您需要手动绘制所需标签的轴。

2)参见las in ?par ,它控制轴标签的粗略定位。

对于1):

x <- rnorm(20)^2 * 10000000
layout(matrix(1:2, ncol = 2))
plot(x)
getOption("scipen")
opt <- options("scipen" = 20)
getOption("scipen")
plot(x)
options(opt)
layout(1)

这使

在此输入图像描述

要绘制自己的轴,请尝试

plot(x / 10000000, axes = FALSE)
axis(1)
pts <- pretty(x / 10000000)
axis(2, at = pts, labels = paste(pts, "MM", sep = ""))
box()

这使

在此输入图像描述

我们使用pretty()为刻度线选择漂亮的位置,就像R一样,然后添加自定义轴。 注意我们如何在plot()调用中抑制轴绘制,然后通过调用axis()box()添加轴和绘图框。

2)结合1)

opt <- options("scipen" = 20)
op <- par(mar = c(5,7,4,2) + 0.1) ## extra margin to accommodate tick labs
x <- rnorm(20)^2 * 10000000
plot(x, las = 1, ylab = "")       ## no y-axis label 
title(ylab = "label", line = 5.5) ## need to plot the axis label
par(op)
options(opt)

这使

在此输入图像描述

注意我们如何在plot()调用中使用las ,我们需要创建一些额外的边距空间来容纳tick标签。 我们还需要手工绘制标签,否则R会将其粘贴在刻度标签中。

对于自定义轴标签,将las = 1添加到axis()调用:

op <- par(mar = c(5,5,4,2) + 0.1)
plot(x / 10000000, axes = FALSE, ylab = "")
axis(1)
pts <- pretty(x / 10000000)
axis(2, at = pts, labels = paste(pts, "MM", sep = ""), las = 1)
title(ylab = "my label", line = 4)
box()
par(op)

哪个产生

在此输入图像描述

使用带自定义标签的axis 首先,将您的数据除以100万。 然后使用paste()创建一个带有MM表示法的系列

y <-rnorm(20)^2 * 1000000 /1000000
x <-11:30

plot(x,y, yaxt="n")
my.axis <-paste(axTicks(2),"MM",sep="")
axis(2,at=axTicks(2), labels=my.axis)

文本现在是水平的。 但如果遇到问题,请使用las = 1来强制标签处于水平状态。

axis(2,at=axTicks(2), labels=my.axis, las=1)

在此输入图像描述

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM