当我运行以下代码时,它会生成此图:
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)
出于某种原因,我无法增加轴标签和图形之间的空格,即使我已尝试使用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
答案 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