2012-01-01 126 views
28

我正在绘制两个群体中每个个体测得的两个同位素的相关系数(值= 0.0:1.0)。我希望我的散点图具有固定的纵横比,这样无论图形设备如何,x轴和y轴都是完全相同的尺寸。建议?如何定义散点图的固定高宽比

这是我在R的第一个情节,任何意见对我的代码的改进表示赞赏?最后,值得投资学习基本的绘图技术,还是应该跳转到ggplot2或lattice?

我的剧情脚本:

## 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) 
+1

是的,照我说的做,而不是我做的:-),并学习'ggplot'。 – 2012-01-01 15:09:45

+2

你已经清楚地了解了基础图形的基础知识,所以我建议至少感受一下ggplot2/lattice,因为考虑到这个问题的质量,它不会是一个巨大的时间投资。他们很不一样,但你会很快接受他们。一旦你了解了每一种语言的一般语法+流程,你就可以决定哪一个你想花大部分时间。但是对每一个都有基本的了解是非常值得的。 – joran 2012-01-01 18:06:14

回答

31

使用asp=1作为参数绘制将由低层次plot.window呼叫得到解释,并且应该给你一个单一纵横比。使用ylim和xlim的调用可能会与纵横比scpecification冲突,并且应该“占上风”。这是一张非常令人印象深刻的第一张R图,由客人提供。和一个优秀的问题建设。高分。

一个令人震惊的注意是您使用的建设xlim=c(0:1.0)。由于xlim期望一个两个元素的向量,我会期待xlim = c(0,1)。如果您更改为一组不同的限制,将会减少按键次数,减少错误发生,因为如果您尝试使用“0:2.5”,“:”操作符会给您带来意想不到的结果。

+0

谢谢!是的,我对x和ylim使用冒号和逗号的错误。我想我幸运的是我使用0到1而不是0到2.5。对于使用asp = 1与asp = TRUE之间的区别,我还有点不清楚。 – 2012-01-01 17:08:06

+1

'TRUE == 1',所以没有区别。但是你可以使用除1之外的其他长宽比。 – 2012-01-01 17:41:35

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

设置绘图类型为方形,这将做的工作(我觉得)你的情况,因为你的x和y的范围是相同的。相当好的隐藏选项记录在?par。

相关问题