我有一个分别在y和x轴上有$ -amounts和日期的图.目前,美元金额从0-15百万美元不等.像这样的东西:
x <- rnorm(20)^2 * 1000000
plot(x)
Run Code Online (Sandbox Code Playgroud)
R做的事情就像'1.0e+07'而'10,000,000'不是横向而不是水平地定向文本.
我的问题是:
1)如何将缩放文本设置为水平方向?
2)如何使用R 10MM代替'10,000,000'或'1.0e+07'?
Rei*_*son 28
1)参见scipen选项,?options其中使用科学记数法是一种惩罚.为了更好地控制,您需要手动绘制所需标签的轴.
2)参见las在?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)
Run Code Online (Sandbox Code Playgroud)
这使

要绘制自己的轴,请尝试
plot(x / 10000000, axes = FALSE)
axis(1)
pts <- pretty(x / 10000000)
axis(2, at = pts, labels = paste(pts, "MM", sep = ""))
box()
Run Code Online (Sandbox Code Playgroud)
这使

我们用来pretty()为R选择漂亮的位置,就像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)
Run Code Online (Sandbox Code Playgroud)
这使

注意我们如何las在plot()调用中使用,我们需要创建一些额外的边距空间来容纳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)
Run Code Online (Sandbox Code Playgroud)
哪个产生

Pie*_*nte 13
使用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)
Run Code Online (Sandbox Code Playgroud)
文本现在是水平的.但如果遇到问题,请使用las = 1来强制标签处于水平状态.
axis(2,at=axTicks(2), labels=my.axis, las=1)
Run Code Online (Sandbox Code Playgroud)
