如何定义散点图的固定面率

时间:2022-08-27 10:15:50

I am plotting correlation coefficients (values = 0.0:1.0) for two isotopes measured in each individual from two populations. I would like to have a fixed aspect-ratio for my scatter-plot so that the x- and y-axis are exactly the same size no matter the graphics device. Suggestions?

我正在绘制两种同位素的相关系数(值= 0.01:1.0),每一种同位素来自两种人群。我希望我的散点图有一个固定的比例,这样无论图形设备是什么,x轴和y轴的大小都是一样的。建议吗?

This is my first plot in R, any comments on refinements to my code is appreciated? Finally, is it worth investing in learning the basic plotting techniques or should I jump right to ggplot2 or lattice?

这是我在R中的第一个情节,对我的代码的改进有什么意见吗?最后,是否值得投资学习基本的绘图技术,还是应该直接跳到ggplot2或晶格?

My plot script:

我的剧情脚本:

## Create dataset
WW_corr <-
structure(list(South_N15 = c(0.7976495, 0.1796725, 0.5338347,
0.4103769, 0.7447027, 0.5080296, 0.7566544, 0.7432026, 0.8927161
), South_C13 = c(0.76706752, 0.02320767, 0.88429902, 0.36648357,
0.73840937, 0.0523504, 0.52145159, 0.50707858, 0.51874445), North_N15 = c(0.7483608,
0.4294148, 0.9283554, 0.8831571, 0.5056481, 0.1945943, 0.8492716,
0.5759033, 0.7483608), North_C13 = c(0.08114805, 0.47268136,
0.94975596, 0.06023815, 0.33652839, 0.53055943, 0.30228833, 0.8864435,
0.08114805)), .Names = c("South_N15", "South_C13", "North_N15",
"North_C13"), row.names = c(NA, -9L), class = "data.frame")

opar <- par()

## Plot results
par(oma = c(1, 0, 0, 0), mar = c(4, 5, 2, 2))           
plot(1,1,xlim=c(0:1.0), ylim=c(0:1.0), type="n", las=1, bty="n", main = NULL,
     ylab=expression(paste("Correlation Coefficient (r) for ", delta ^{15},"N ",
                     "\u0028","\u2030","\u0029")),
     xlab=expression(paste("Correlation Coefficient (r) for ", delta ^{13},"C ",
                     "\u0028","\u2030","\u0029")))

points(WW_corr$South_N15, WW_corr$South_C13, pch = 23, cex = 1.25, 
       bg ="antiquewhite4", col = "antiquewhite4")
points(WW_corr$North_N15, WW_corr$North_C13, pch = 15, cex = 1.25,
       bg ="black")
axis(1, at = seq(0, 1.0, by = 0.1), labels = F, tick = TRUE, tck = -0.01)
axis(2, at = seq(0, 1.0, by = 0.1), labels = F, tick = TRUE, tck = -0.01)
abline(h=.86, v=.86, col = "gray60", lty = 2)
legend("topleft", c("North", "South"), pch = c(15, 23), 
       col = c("black", "antiquewhite4"), pt.bg = c("black", "antiquewhite4"),
       horiz=TRUE, bty = "n")

par(opar)

2 个解决方案

#1


34  

Using asp=1 as a parameter to plot will get interpreted by the low-level plot.window call and should give you a unitary aspect ratio. There is the potential that a call using ylim and xlim could conflict with an aspect ratio scpecification and the asp should "prevail". That's a very impressive first R graph, by the away. And an excellent question construction. High marks.

使用asp=1作为参数进行绘图将被底层绘图解释。窗口调用应该给你一个统一的纵横比。有可能使用ylim和xlim的调用可能与纵横比scpecification冲突,而asp应该“占优”。这是令人印象深刻的第一个R图。这是一个很好的问题。高分。

The one jarring note was your use of the construction xlim=c(0:1.0). Since xlim expects a two element vector, I would have expected xlim=c(0,1). Fewer keystrokes and less subject to error in the future if you changed to a different set of limits, since the ":" operator would give you unexpected results if you tried that with "0:2.5".

一个不和谐的音符是您对构建xlim=c的使用(0:1.0)。因为xlim期望一个两个元素向量,所以我希望xlim=c(0,1)。如果您更改为不同的一组限制,那么将来的击键次数将减少,出错的可能性也将减少,因为如果您尝试使用“0:2.5”,“:”操作符将会给您意想不到的结果。

#2


37  

par(pty="s")
plot(...)

sets the plot type to be square, which will do the job (I think) in your case because your x and y ranges are the same. Fairly well hidden option documented in ?par.

将plot类型设置为square,这将在您的示例中完成工作(我认为),因为您的x和y范围是相同的。相当好的隐藏选项文档在?par。

#1


34  

Using asp=1 as a parameter to plot will get interpreted by the low-level plot.window call and should give you a unitary aspect ratio. There is the potential that a call using ylim and xlim could conflict with an aspect ratio scpecification and the asp should "prevail". That's a very impressive first R graph, by the away. And an excellent question construction. High marks.

使用asp=1作为参数进行绘图将被底层绘图解释。窗口调用应该给你一个统一的纵横比。有可能使用ylim和xlim的调用可能与纵横比scpecification冲突,而asp应该“占优”。这是令人印象深刻的第一个R图。这是一个很好的问题。高分。

The one jarring note was your use of the construction xlim=c(0:1.0). Since xlim expects a two element vector, I would have expected xlim=c(0,1). Fewer keystrokes and less subject to error in the future if you changed to a different set of limits, since the ":" operator would give you unexpected results if you tried that with "0:2.5".

一个不和谐的音符是您对构建xlim=c的使用(0:1.0)。因为xlim期望一个两个元素向量,所以我希望xlim=c(0,1)。如果您更改为不同的一组限制,那么将来的击键次数将减少,出错的可能性也将减少,因为如果您尝试使用“0:2.5”,“:”操作符将会给您意想不到的结果。

#2


37  

par(pty="s")
plot(...)

sets the plot type to be square, which will do the job (I think) in your case because your x and y ranges are the same. Fairly well hidden option documented in ?par.

将plot类型设置为square,这将在您的示例中完成工作(我认为),因为您的x和y范围是相同的。相当好的隐藏选项文档在?par。