如何在R三元图中使线宽和文字宽度更大?

时间:2015-01-30 21:24:25

标签: r plot

我正在寻找vcd或base(或可能是其他)的解决方案,但最好不是ggplot2。例如,在下面的玩具脚本中,我想增加蓝色三角形(pch = 2点)中线条的宽度,轴名称的字体大小,我也希望能够进一步移动它们从角落里。在三元图中,lwd的传统命令不起作用。

require(vcd)
x = matrix(runif(30),10,3)

ternaryplot(x,  grid=FALSE, 
            pch=20, cex=1, col=1, 
            dimnames=c('name\n1','name\n2','name\n3' ))
ternaryplot(matrix(x[8,],1,3),
            cex=1.5, col='blue', pch=2, 
            new=F, grid=F, bg="transparent")
# add custom grid
    top <- sqrt(3)/2
    xlim <- c(-0.03, 1.03)
    ylim <- c(-1, top)
    pushViewport(viewport(width = unit(1, "snpc")))
    pushViewport(viewport(width = 0.8, height = 0.8, xscale = xlim, 
                          yscale = ylim, name = "plot"))
    grid.lines(c(0.5, 0.00), c(.29, 0))
    grid.lines(c(0.5, 1), c(.29, 0))
    grid.lines(c(0.50, 0.50), c(top,.29))
    upViewport(2) 

我最终失败的一个想法是尝试在三元图上放置一个透明的常规图,并在那里进行绘图和标注。我也想知道如何并排进行常规情节和三元情节。

1 个答案:

答案 0 :(得分:0)

如果您想使用ternaryplot的设施执行此操作,则需要进行一些黑客操作。 “dimnames”使用grid.text构建,参数数量(一个)设置为非常有限:

grid.text(x = 0.25 - 2 * eps - shift, y = 0.5 * top + 
            shift, label = dimnames[2], rot = 60, 
            gp = gpar(col = dimnames_color)) # three such calls

同样,三元图的外边界(看起来就是你构造内部三角形的方式)是用grid.polygon构建的,而'gpar'参数只接受两个参数:

grid.polygon(c(0, 0.5, 1), c(0, top, 0), gp = gpar(fill = bg, 
        col = border), ...)

您可以复制代码,编辑以添加其他gpar参数,然后分配给ternaryplot2或您选择的名称。我不知道是否需要,但您可能需要完成以下任务:

  environment(new_plot_name) <- environment(ternaryplot)