【问题标题】:R plotly: How to keep width parameter of ggplot2 geom_bar() when using ggplotly()R plotly:使用ggplotly()时如何保持ggplot2 geom_bar()的宽度参数
【发布时间】:2017-03-15 14:58:11
【问题描述】:

由于某种原因,当使用plotlyggplotly 函数将 R a ggplot2 条形图 (geom_bar) 转换为交互式绘图时,ggplotly“强制”条形图粘在一起,甚至如果指定了width 参数:

library(plotly)
library(ggplot2)

DF <- read.table(text="Rank F1     F2     F3
1    500    250    50
2    400    100    30
3    300    155    100
4    200    90     10", header=TRUE)

library(reshape2)
DF1 <- melt(DF, id.var="Rank")

p <- ggplot(DF1, aes(x = Rank, y = value, fill = variable)) +
  geom_bar(stat = "identity")

ggplotly(p)

p <- ggplot(DF1, aes(x = Rank, y = value, fill = variable)) +
  geom_bar(stat = "identity", width = 0.4)

ggplotly(p)

由于某种原因,它还颠倒了ggplot2s 的默认颜色顺序(尽管保持图例中的顺序...),但我可以处理。

任何想法都可以告诉ggplotly 不要把我的栏杆粘在一起,就像默认的一样 ggplot2 行为?

【问题讨论】:

    标签: r ggplot2 plotly


    【解决方案1】:

    告诉 ggplotly 不要把我的酒吧粘在一起的任何想法,比如 ggplot2 的默认行为?

    ggplotly 将bargap 设置为0,您可以通过layout 设置为您想要的值

    ggplotly(p) %>% layout(bargap=0.15)
    


    由于某种原因,它还会反转 ggplot2s 的默认颜色顺序 (虽然保持传说中的顺序......),但我可以处理这个。

    让我们也解决这个问题。之后您可以通过翻转条形并反转图例来更改顺序。

    gp <- ggplotly(p) %>% layout(bargap = 0.15, legend = list(traceorder = 'reversed'))
    
    traces <- length(gp[['x']][[1]])
    for (i in 1:floor(traces / 2)) {
      temp <- gp[['x']][[1]][[i]]
      gp[['x']][[1]][[i]] <- gp[['x']][[1]][[traces + 1 - i]]
      gp[['x']][[1]][[traces + 1 - i]] <- temp
    }
    

    【讨论】:

    • 太棒了,谢谢。你知道ggplotly为什么会改变颜色顺序以及如何处理吗?目前我在原始 ggplot2 图中使用相反的颜色顺序,这就是我得到我想要的颜色顺序的方式 - 但这是一个丑陋的解决方案。
    • @GioraSimchoni:查看更新的答案以了解替代方法
    猜你喜欢
    • 2017-08-06
    • 2021-08-21
    • 2016-10-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多