在情节内绘图

时间:2013-01-11 23:14:37

标签: r graph plot

我有情节1

curve(exp(x), from=1, to=5, lwd=5)
curve(150-exp(x), from=1, to=5, lwd=5, col="darkblue",add=T)

在里面我想添加以下情节2

par(mar=c(7,7,1,1))
curve(exp(x), from=1, to=5, lwd=7, xlab="chi", ylab="exp(x)", cex.lab=4,axes=F)
axis(1, labels=NA,at=c(0,5))
axis(2, labels=NA,at=c(0,150))
text(1,120,"Alpha",adj=c(0,0),cex=3)
text(3.5,10,"Beta",adj=c(0,0),cex=3)

为了获得以下

Combined

我还想让情节2变得透明,这样如果在情节2后面有一些情节1的元素,它们仍会显示(就像蓝线一样)。同样重要的是图2的较大标签以及其轴上没有标签和刻度。

这可能吗?请仅基于R解决方案(没有ggplot2 /无格)

2 个答案:

答案 0 :(得分:15)

好的,这是一个例子,我把它绘制成10 x 10英寸的pdf。 (使用par(fig = )等人的一部分令人沮丧的是,它们的效果在很大程度上取决于绘图设备的大小。)


编辑添加一些解释:

基本图形绘制参数par("fig")描述/设置图形区域的位置作为“绘图区域”的比例(对于单个图形图,通常是整个设备)。它需要c(xmin, xmax, ymin, ymax)格式的长度为4的向量,其中包含01之间的数字(比例)。

在这里,我使用grconvertX()grconvertY()将xy位置表示为较大的情节(也称为"user")坐标系,并转换为"ndc"(标准化设备坐标) ) 坐标系。 "user"坐标系统更加人性化,而"ndc"(上面表达的警告)是par("fig")使用的坐标系。 grconvert*()调用就是在它们之间执行转换。

## pdf("fig-in-fig.pdf", width=10, height=10)
curve(exp(x), from=1, to=5, lwd=5)
curve(150-exp(x), from=1, to=5, lwd=5, col="darkblue",add=T)

## Here's the bit I added.
par(fig = c(grconvertX(c(1, 3), from="user", to="ndc"),
            grconvertY(c(50, 125), from="user", to="ndc")),
    mar = c(4,6,1,1),
    new = TRUE)

curve(exp(x), from=1, to=5, lwd=7, xlab="chi", ylab="exp(x)", cex.lab=4,axes=F)
axis(1, labels=NA,at=c(0,5))
axis(2, labels=NA,at=c(0,150))
text(1,120,"Alpha",adj=c(0,0),cex=3)
text(3.5,10,"Beta",adj=c(0,0),cex=3)
## dev.off()

enter image description here

答案 1 :(得分:7)

这是一种方法:

curve(exp(x), from=1, to=5, lwd=5)
curve(150-exp(x), from=1, to=5, lwd=5, col="darkblue",add=T)
par(new=TRUE)
par(oma=c(1,4,5,1))
par(mfcol=c(2,2), mfg=c(1,1))
par(mar=c(7,7,1,1))
curve(exp(x), from=1, to=5, lwd=7, xlab="chi", ylab="exp(x)", cex.lab=2,axes=F)
axis(1, labels=NA,at=c(0,5))
axis(2, labels=NA,at=c(0,150))
text(1,120,"Alpha",adj=c(0,0),cex=1.5)
text(4,10,"Beta",adj=c(0,0),cex=1.5)

给我这个:

enter image description here

使用各种选项(尤其是omamar)进行游戏,以便将结果格式化为您的选择。