R中ggplotly包中的ggplot问题:缺少图例,轴和标签之间没有空格

时间:2016-09-22 13:44:58

标签: r plot ggplot2 plotly

当我运行以下代码时,它会生成此图:

plot <- ggplot(dat, aes(x = HeightUnderDebris, y = GrassHeight)) + 
    geom_point() +
    stat_smooth(method = 'lm', se = FALSE,color = 'darkgreen') +
    stat_smooth(aes(x = HeightUnderDebris, y = 5, linetype = "Linear Fit"), 
                method = "lm", formula = y ~ x, se = F, size = 1, color = 'lightgreen') +
    labs(x = "Height under CWD (cm)", y = "Grass Height (cm)")+
    scale_fill_manual(name = 'My Lines', values = c("darkgreen", "lightgreen")) +
    theme(axis.title.x = element_text(color = "black", vjust = -1),
          axis.title.y = element_text(vjust = 0.5))
ggplotly(plot)

enter image description here

出于某种原因,我无法增加轴标签和图形之间的空格,即使我已尝试使用vjust的许多不同方式。我可以在右上角看到一些传奇的外表。但我无法看到整个事情,也无法缩小。我上面的代码有什么问题吗?

这是我数据的一个子集:

GrassHeight HeightUnderCWD 0 0 0 0 0 0 8 16 0 0 0 0 0 0 2 2 6 6 0 0 0 0 1 1 0 0 0 0 0 0 8 15 0 0 7 7 15 15

1 个答案:

答案 0 :(得分:1)

如果您单独查看绘图对象,您将看到缺少使用scale_fill_manual定义的名为“My Lines”的图例,因此在转换之前ggplot代码有问题。而是从第二个stat_smooth图层打印'Linear Fit'(有关线型的有效值,请参阅?linetype。)

要纠正尝试将颜色置于aes映射中(类似于Alistaire突出显示的内容)。

参考: ggplot2: missing legend and how to add?

然后,您还需要使用scale _ *** _ manual'color'而不是'fill'来创建自定义图例。这与先前使用stat_smooth映射的aes匹配。

参考:R: Custom Legend for Multiple Layer ggplot

修订代码:

plot <-   ggplot(dat, aes(x = HeightUnderCWD, y = GrassHeight)) + 
    geom_point() + 
    stat_smooth(aes(color = 'darkgreen'),method = 'lm', se = FALSE,) +  
    stat_smooth(aes(x = HeightUnderCWD, y = 5,color='lightgreen'),
         method = "lm", formula = y ~ x, se = F, size = 1) + 
    scale_color_manual(name = 'My Lines', 
        values =c("darkgreen"="darkgreen", "lightgreen"="lightgreen"),
        labels=c("GrassHeight 5cm","Linear Fit")) +
    labs(x = "Height under CWD (cm)", y = "Grass Height (cm)")+
    theme(axis.title.x = element_text(color = "black", vjust = -1),
        axis.title.y = element_text(vjust = 0.5))

#check plot
plot

ggplotly(plot)

如果您仍然不喜欢将其转换为plotly之后的外观,则可以使用“布局”功能调整绘图对象上的边距/填充。您无需直接保存对象和修改对象详细信息。 plot.ly网站上的示例显示了如何在不保存的情况下添加。

示例命令使用他们的示例:

ggplotly(plot) %>% layout(autosize=F,margin=list(l=50,r=50,b=50,t=50,pad=5))

参考文献:
https://plot.ly/r/setting-graph-size/
https://plot.ly/r/reference/#layout-margins