ggplot2与grid.arrange的多个图例对齐有问题

时间:2018-05-05 15:28:08

标签: r ggplot2

我试图将两个图例添加到同一个ggplot2图表中,并且我在对齐时遇到了很糟糕的时间。我已经得到了代表一些数据的点,然后也安装了回归线,所以我希望将颜色的图例分开,以便它清楚哪些只是针对点而哪些是适合的线条。到目前为止,这是我最好的尝试:

gtable

但传说的定位是可怕的:my best attempt at graph

我不知道如何为#34;性别"在左边与另外两个对齐,我不希望中间有这么多的空白区域。

我还摆弄了gridviewPort个套餐&#39;像library(gtable) library(grid) grid.newpage() pushViewport(vp = viewport()) vp1 <- viewport(width = 0.8, height = 1, x = 0, y = 0) grid.draw(PlotMain) vp2 <- viewport(width = 0.2, x = 0.9, y = 0.6) pushViewport(vp2) grid.draw(LegendStudy) pushViewport(vp3 = viewport(width = 0.2, x = 0.9, y = 0.4)) grid.draw(LegendTrend) 这样的命令,但对于如何使用它们完全无能为力。 (对于体面的教程的建议将非常感激;我还没有找到任何建议。)我试过了

<script>
    var onCommand = function (column, command, record, recordIndex, cellIndex) {
       Ext.Msg.alert('record = ' + record.data.ID);
        Ext.Ajax.request({
            url: '/Details/',
            method: 'GET',
            params: {
                id: record.data.ID
            },

            success: function (response) {
                var result = (response.responseText);
                if (result != "") {
                    modelName = result;
                    CreateLookUp(combo, id, false, true);
                } else {

                    CreateLookUp(combo, id, true, false);
                }
            }
        });

            }
</script>

但是我显然不知道如何使用它,因为传说与主图重叠并且位于我看来完全随机的(即与我认为我指定的x和y坐标无关)的方式。 evenworse

2 个答案:

答案 0 :(得分:1)

它不清楚OP想要什么,但下一个选择是将第二个传奇的gtable添加到第一个,

library(gtable)
leg2 <- LegendTrend$grobs[[1]]
leg <- gtable_add_rows(LegendStudy, pos = nrow(LegendStudy) - 1,
                       heights = sum(leg2$heights))
leg <- gtable_add_grob(leg, leg2, t = nrow(leg) - 1, l = 3)
grid.arrange(PlotMain, right = leg)

关于网格视口的教程,有R图形书,但是ggplot2的设计已经从基础网格大幅度漂移,引入了gtable作为放置图形元素的中间框架。 ggplot2传说是嵌套gtables的复杂结构,很少有人理解。 gtable没有记录,它的开发很早就停止了,所以最好的信息来源就是代码本身。

答案 1 :(得分:0)

leg <- gtable_rbind(LegendStudy, LegendTrend, size =  "first")
grid.arrange(PlotMain, right = leg)