r - 带有 ggplot 的闪亮会产生错误的图例:带有刻面的重复图例条目
问题描述
我想绘制一个添加了 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)
解决方案
问题不是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 对象时,图例问题和其他显示问题很常见。Plotly 和 ggplot2 是完全独立的绘图框架,具有自己的语法和图形对象。Plotly 提供了转换函数方法,但在从一种格式到另一种格式的转换中仍然会丢失一些东西,因为它们之间没有完全对等。
我建议尝试以本机plotly
语法实现您的情节,而不是尝试将其从ggplot2
.
推荐阅读
- javascript - 无法通过 URL 将变量从 javascript 文件传递到 php 文件
- openid - OpenID 客户端提供者
- javascript - 当其中有冒号和下划线时,似乎无法按 ID 选择元素
- javascript - Javascript - 从过滤器中删除数组中的对象
- multithreading - 控制每个 MPI 进程的核心数量(独立于每个等级)
- reactjs - 如何在底部标签导航器中显示徽章?
- javascript - JWK“key_ops”成员与 Web Crypto 调用指定的成员不一致
- f# - 如何使用 F# 实现这个通用 C# 接口?
- javascript - innerHTML Web 组件中的 @import CSS 文件不起作用
- java - 请求超时 - JMeter HTTP2 插件