带有ggplot的有光泽生成错误的图例:带有构面的重复图例条目

时间:2019-07-29 08:37:15

标签: r ggplot2 shiny

我想绘制带有增加的geom_hline的构面图,并在图例中显示该线。但是,当我将行添加到图例时,所有条目都重复到构面数。
如何避免这种行为?
这是我的MWE

library(shiny)
library(plotly)
library(ggplot2)

df <- mpg

# Define UI for application that draws a histogram
ui <- fluidPage(
    mainPanel(
        plotlyOutput('graph')
    )
)

# Define server logic required to draw a histogram
server <- function(input, output) {

    output$graph <- renderPlotly({
        p <- ggplot2::mpg %>%
        plot_ly %>%
        ggplot() +
        geom_point(aes(displ, hwy, color = class))

        facet <- p + facet_wrap(~year)

        facet + geom_hline(aes(yintercept = 20, linetype = 'hline20'), color = '#00b700') +
            scale_linetype_manual(name = 'line', values = 1,
                                 guide = guide_legend(aes = list(color = "#00b700")))
    })
}

# Run the application 
shinyApp(ui = ui, server = server)

1 个答案:

答案 0 :(得分:1)

问题不是shiny也不是ggplot2。问题是将ggplot2对象转换为plotly对象。

下面,我将ggplot步骤与plotly步骤隔离开了,并完全消除了图片中的亮点。

p <- ggplot2::mpg %>%
      ggplot() +
      geom_point(aes(x = displ, y = hwy, color = class))

facet <- p + facet_wrap(~year)

final <- facet + geom_hline(aes(yintercept = 20, linetype = 'hline20'), color = '#00b700') +
    scale_linetype_manual(name = 'line', values = 1, guide = guide_legend(aes = list(color = "#00b700")))

print(final)

上面显示的很好。

ggplotly(final)

上面的显示错误与您的显示错误相同,不涉及闪亮。

将ggplot2对象转换为可打印对象时,通常会出现图例问题和其他显示问题。 Plotly和ggplot2是完全独立的绘图框架,具有自己的语法和图形对象。 Plotly提供了转换函数方法,但是在从一种格式转换为另一种格式的过程中,事情仍然会丢失,因为它们之间没有完全等同的内容。

我建议您尝试以本机plotly的语法来实现您的绘图,而不是尝试从ggplot2进行转换。