我正在寻找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)
我最终失败的一个想法是尝试在三元图上放置一个透明的常规图,并在那里进行绘图和标注。我也想知道如何并排进行常规情节和三元情节。
答案 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)