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")
我很惊讶地发现这会产生如下图表:
两件事并不是我所期望的:1)x轴和y轴不限于它们的xlim和ylim值。 (为什么会这样?)和2)这个数字几乎是正方形。
我可以通过在使用代码之前手动调整R窗口或Rstudio窗口来手动调整图形,但这是不可行的,因为我有很多要绘制的图形,许多具有不同的xlim和ylim大小,这些需要将数字插入预先格式化的报告中(这就是他们需要满足这些确切布局要求的原因)。 我也尝试过使用
dev.new(width = 7, height = 10)
但这也没有帮助。
我的问题是: 1)我怎样才能强迫"该图被限制为传递给函数的确切xlim和ylim范围? 和 2)如何生成具有精确相对尺寸的图形(x轴是y轴长度的.7倍)
答案 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
将覆盖xlim
和ylim
设置(如果您查看{的帮助{ {1}},它会将您引导至plot
以了解有关plot.window
的更多信息:
如果
asp
是一个有限的正值,则设置窗口以便这样做 x方向上的一个数据单元的长度等于asp
*一个数据 单位在y方向。请注意,在这种情况下,
asp
不再由例如,par("usr")
,而是par("xaxs")
和设备的宽高比。 (看到 如果您在运行后以交互方式调整绘图设备的大小,会发生什么 以下示例!)特殊情况
asp
生成距离之间的距离 点在屏幕上准确表示。asp == 1
的值可以 用于生成更精确的地图使用纬度和 经度。
正如@ mr.joshuagordon所说,你可以使用asp > 1
(或pdf
或png
,如果你想要位图输出)功能并使用尺寸来获得宽高比你想要从jpeg
中删除asp
参数,以便设置plot
和xlim
值。
另一种选择是切换到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}}设置绘图区域的物理尺寸。此设置不会影响asp
和pin
的标称值,但会更改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”)