【发布时间】:2014-05-26 20:32:56
【问题描述】:
我有在 R 中生成膨胀图的代码。检查一下!
我用这个代码做到了:
SwellPlot <- function(Data,P) {
par(mfcol=c(1,1), mar=c(4, 4.5, 0, 0) + 0.1)
plot(c(0.5,P+0.5), c(-0.5,P+0.5), type="n", cex=1, lab=c(20,20,1), cex.lab=1.5, yaxs="i", xaxs="i", xlab=~bold("Stuff!"), ylab=~bold("Other stuff!"))
for (f in 1:(P+1)) {
for (r in 0:P) {
points(r,(f-1), pch=15, cex=(60/P)*sqrt(Data[f,r]/200))
}
}
}
将Data 输入为矩阵,就像上面例子中使用的那样:
Data <- matrix(c(0, 117, 76, 7, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 199, 1, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 200, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 188, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 90,
109, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 38, 143, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 18, 142, 39, 1, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 8, 114, 75, 3, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 4, 95, 99, 2, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 68, 121, 7, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 65, 122, 10,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 65,
120, 15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2, 42, 132, 23, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 35, 135, 30, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 44, 128, 27, 1, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 33, 139, 27, 1, 0, 0, 0, 0,
0, 0, 0, 0), 17, 16, byrow=FALSE)
我想在膨胀图的右侧添加一系列垂直标签(这些标签与 y 轴标签不同,我需要保持原样)。我已经通过扩展 x 轴并使用 text() 来做到这一点,但是当我这样做时,它看起来很笨拙(在 x 轴标签上),而且因为我的绘图的 x 轴长度变化很大,所以我不得不花很多钱试错时间确保我的标签的宽度不与最右边的绘制元素重叠。改进后的情节看起来像这样:
我想象必须有一些相对简单的方法来使用layout() 或mfcol 或类似的方法,但文档和示例对我来说很快变得复杂。你会如何解决这个问题?
允许我专门 (1) 制作标签列的宽度我想添加膨胀图宽度的 8%,以及 (2) 制作膨胀图(不包括标签在右侧)保持其 1:1 的纵横比。
如果可以使用par 和plot 等来完成,也可以获得奖励积分。
【问题讨论】:
-
你需要分享你的代码来生成上面的图。还包括样本数据以重现该图,以便我们对其进行测试。您还没有明确说明您使用的是哪种绘图系统,因此无法提出具体建议。你能制作一张图片来展示最终产品的样子吗?您可以使用 Paint 或其他工具在当前绘图上绘制。
-
@MrFlick 我希望我已经成功整合了您要求的改进。如果我能做更多,请告诉我。我希望你会考虑在我的改进之后修改你的反对票。
-
@RichardScriven 你可以添加赏金;)
-
您能帮我理解为什么您建议使用
structure()以及L后缀在修订版中的含义吗? -
@RichardScriven 在口语英语中,“奖励积分......”的意思是“如果你能超越基本要求,那就给你额外的荣誉”。更直接地回答:“更感激。” :)