R中的xlim / ylim行为感到困惑

时间:2014-08-30 14:02:37

标签: r

R-3.1.1,Win7x64

嗨,我有数据,其中测量两个变量,使得X从0到70运行,Y从0到100运行。我想做一个简单的观察散点图。 散点图应该被维度化,使得x轴(从0-70运行)是y轴的大小(从0到100)。

我使用以下代码

plot.new()
plot(0, 0, asp = 1, xlim = c(0, 70), ylim = c(0, 100), xlab = "", ylab = "", type = "n")

我很惊讶地发现这会产生如下图表: enter image description here

两件事并不是我所期望的:1)x轴和y轴不限于它们的xlim和ylim值。 (为什么会这样?)和2)这个数字几乎是正方形。

我可以通过在使用代码之前手动调整R窗口或Rstudio窗口来手动调整图形,但这是不可行的,因为我有很多要绘制的图形,许多具有不同的xlim和ylim大小,这些需要将数字插入预先格式化的报告中(这就是他们需要满足这些确切布局要求的原因)。 我也尝试过使用

dev.new(width = 7, height = 10)

但这也没有帮助。

我的问题是: 1)我怎样才能强迫"该图被限制为传递给函数的确切xlim和ylim范围? 和 2)如何生成具有精确相对尺寸的图形(x轴是y轴长度的.7倍)

3 个答案:

答案 0 :(得分:6)

您可以将图表另存为pdf,并按如下方式指定其尺寸:

pdf("SampleGraph.pdf",width=7,height=10)
plot(0, 0, xlim = c(0, 70), ylim = c(0, 100), asp=NA, xlab = "", ylab = "", type = "n") # change asp to NA
dev.off() # turn off plotting

答案 1 :(得分:5)

asp的帮助中对plot.window的讨论意味着asp将覆盖xlimylim设置(如果您查看{的帮助{ {1}},它会将您引导至plot以了解有关plot.window的更多信息:

  

如果asp是一个有限的正值,则设置窗口以便这样做   x方向上的一个数据单元的长度等于asp *一个数据   单位在y方向。

     

请注意,在这种情况下,asp不再由例如,   par("usr"),而是par("xaxs")和设备的宽高比。 (看到   如果您在运行后以交互方式调整绘图设备的大小,会发生什么   以下示例!)

     

特殊情况asp生成距离之间的距离   点在屏幕上准确表示。 asp == 1的值可以   用于生成更精确的地图使用纬度和   经度。

正如@ mr.joshuagordon所说,你可以使用asp > 1(或pdfpng,如果你想要位图输出)功能并使用尺寸来获得宽高比你想要从jpeg中删除asp参数,以便设置plotxlim值。

另一种选择是切换到ylim,这样可以轻松分别设置轴限制和宽高比:

ggplot2

更新:以下是如何在基本图形中独立控制library(ggplot2) # Some fake data dat = data.frame(x=c(2,30,50), y=c(10, 60, 90)) # 1 y-unit = 1 x-unit, so the plot area is not square ggplot(dat, aes(x,y)) + geom_point() + scale_x_continuous(limits=c(0,70)) + scale_y_continuous(limits=c(0,100)) + coord_fixed(ratio=1) # 1 y-unit = 0.7 * 1 x-unit, so the plot is square, but the physical distance # of each x-unit and y-unit are no longer the same ggplot(dat, aes(x,y)) + geom_point() + scale_x_continuous(limits=c(0,70)) + scale_y_continuous(limits=c(0,100)) + coord_fixed(ratio=70/100) xlim和宽高比:而不是ylim,使用图形参数{{ 1}}设置绘图区域的物理尺寸。此设置不会影响asppin的标称值,但会更改1 x-unit和1 y-unit的物理距离度量。以下是一些例子:

示例1:我们将在一个PDF页面上创建两个面板,每个面板具有不同的宽高比:

xlim

示例2:如果将ylim设置为大于图形设备的大小,则表示您将收到错误消息。我们将使用默认设备(在我的情况下为# Create a 12" x 6" pdf graphics device pdf("test.pdf", width=12, height=6) # Divide graphics device into two regions, each of which will contain a plot par(mfrow=c(1,2)) # Left Panel: 5" x 5" plot area (plot region is square, so 1 y-unit = # 0.7 * 1 x-unit in terms of physical distance in the plot region) par(pin=c(5,5)) plot(0, 0, xlim = c(0, 70), ylim = c(0, 100), xlab = "", ylab = "", type = "n",main='par(pin=c(5,5)') # Right Panel: 0.7*5" x 5" plot area (so 1 x-unit = 1 y-unit # in terms of physical distance in the plot region) par(pin=c(0.7*5,5)) plot(0, 0, xlim = c(0, 70), ylim = c(0, 100), xlab = "", ylab = "", type = "n",main='par(pin=c(5,0.7*5)') dev.off() )。

pin

示例3:如果超出RStudioGD(或par(pin=c(10, 10)) plot(0, 0, xlim = c(0, 70), ylim = c(0, 100), xlab = "", ylab = "", type = "n",main='par(pin=c(5,4)') # Get dimensions of the default plot device par("din") # Create a plot that takes up an area just a bit smaller than the device size par(pin=par("din")-0.2) plot(0, 0, xlim = c(0, 70), ylim = c(0, 100), xlab = "", ylab = "", type = "n",main='par(pin=c(5,4)') # Create a plot that takes up an area just a bit larger than the device size # (we'll get an error this time) par(pin=par("din") + 0.01) plot(0, 0, xlim = c(0, 70), ylim = c(0, 100), xlab = "", ylab = "", type = "n") > Error in plot.new() : plot region too large 等)设备的尺寸,则会出现同样的错误:

pdf

答案 2 :(得分:0)

plot(...,xaxs =“ i”,yaxs =“ i”)