ggplot2 + plotly:坐标轴标题消失

9

当我使用ggplotly()ggplot图形转换时,出现了一个问题:y轴消失了。这里有一个使用iris数据集的可重现示例(这个示例很傻,但无论如何)。

data(iris)
g = ggplot(data = iris, aes(x = Petal.Length, y = Petal.Width, fill = Species)) + 
  geom_bar(stat = "identity", position = "dodge") + 
  scale_fill_manual(name = "legend", values = c("blue", "red", "green")) +
  ylab("Y title") +
  ylim(c(0,3)) +
  xlab("X title") +
  ggtitle("Main title")
g
ggplotly(g)

正如你所看到的,y轴标题消失了。

如果删除ylim就可以运行,但我想指定y轴限制。

我尝试做以下操作:

data(iris)
g = ggplot(data = iris, aes(x = Petal.Length, y = Petal.Width, fill = Species)) + 
  geom_bar(stat = "identity", position = "dodge") + 
  scale_fill_manual(name = "legend", values = c("blue", "red", "green")) +
  scale_y_continuous(name = "Y title", limits = c(0, 3)) +
  xlab("X title") +
  ggtitle("Main title")
g
ggplotly(g)

但现在问题是图例标题不合适。

我的配置:R 3.2.0、plotly 2.0.16、ggplot2 2.0.0

在这两个示例中,我想要的图形由ggplot生成,但ggplotly生成的却是另一种形式。这是一个问题吗?是否有解决方法?

3个回答

9

我不确定为什么会发生这种情况,但是这里有一个解决办法。它将给你想要的结果。

p <- ggplotly(g)
x <- list(
    title = "X Title"
)
y <- list(
    title = "Y Title"
)
p %>% layout(xaxis = x, yaxis = y)

字幕怎么样?我们可以添加一个吗? - Julien
1
@Julien,是的,你可以尝试一下:ggplotly(g) %>% layout(title = list(text = paste0('主标题', '<br>', '<sup>', '仅供测试', '</sup>'))) - MLavoie
如何将图的标题放在坐标轴名称之上? - Julien
@Julien 我不明白你的意思。你是指只需要一个标题,而没有x轴和y轴吗? - MLavoie
@Julien。使用ggtitle("主标题")(已经在原始代码中)可以添加绘图标题。也许你应该用自己的例子提出问题,这样回答会更容易。而不是在评论区来回交流。 - MLavoie
显示剩余4条评论

2
我遇到了同样的问题,感谢您的评论,我通过它解决了这个问题。然而,我的问题是轴标签贴在了图上,所以我通过添加边距来解决了它。
p <- ggplotly(g + ylab(" ") + xlab(" "))
x <- list(
title = "X Title")
y <- list(
title = "Y Title")
p %>% layout(xaxis = x, yaxis = y, margin = list(l = 75, b =50))

`


2
我曾经遇到过类似的问题。在Shiny应用程序中,通过ggplotly传递的ggplot对象会出现y轴标签被裁剪的情况。
为了解决这个问题,我按照MLavoie的建议操作,但是结果导致我的ggplot标签和ggplotly标签都出现了。为了解决这个问题,我只需将ggplot标签设置为空格即可,这样一切正常(如果将它们设置为空,则plotly标签将与轴刻度值重叠)。
p <- ggplotly(g + ylab(" ") + xlab(" "))
x <- list(
    title = "X Title"
)
y <- list(
    title = "Y Title"
)
p %>% layout(xaxis = x, yaxis = y)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接