1

我想让 geom_col 的边框透明。它仅在使用 ggplot2 时有效:

library(ggplot2)

dataToPlot <- data.frame(Freq = c(0.0000000, 0.7092199, 1.4184397, 2.1276596, 2.8368794), 
                          variable = rep('A',5), value = c(43089.76, 62923.17, 35446.15, 29553.76, 22433.08))

p <- ggplot( dataToPlot , aes(x=Freq, y = value, group = variable   )  ) +  #
  # geom_bar(stat = "bin") fill = variable, 
  geom_col( mapping = aes(col = variable, fill = variable), colour = F,  alpha = 0.2, orientation = "x", position = "dodge") + 
  # scale_linetype(aes(linetype = 0))
  guides(color = FALSE)

dev.new(); p

但是,带有闪亮的完全相同的代码给出了错误:“错误:无效的颜色名称'FALSE'”

library(ggplot2)
library(shiny)

dataToPlot <- data.frame(Freq = c(0.0000000, 0.7092199, 1.4184397, 2.1276596, 2.8368794), 
                          variable = rep('A',5), value = c(43089.76, 62923.17, 35446.15, 29553.76, 22433.08))

ui <- fluidPage( 
  useShinyjs(),
  fluidRow( 
    column(8,
           plotOutput("plot")
    )
  )
)

server <- function(input, output) {
  output$plot <- renderPlotly({
    p <- ggplot( dataToPlot , aes(x=Freq, y = value, group = variable   )  ) +  #
      # geom_bar(stat = "bin") fill = variable, 
      geom_col( mapping = aes(col = variable, fill = variable), colour = F,  alpha = 0.2, orientation = "x", position = "dodge") + 
      # scale_linetype(aes(linetype = 0))
      guides(color = FALSE)

  })
}

shinyApp(ui,server)

我究竟做错了什么?

4

1 回答 1

2

你正在做一些错误。

首先,你忘了提到你也在使用包shinyjsplotly.

其次,您在服务器部分使用,但在 ui 中renderPlotly调用。plotOutput正确的是plotlyOutput在 ui 中,因为您想要一个情节图形。

另一件事是:由于您想要一种绘图类型的图形,因此您必须将您的 ggplot 图形转换为绘图类型p。因此,您应该添加ggplotly(p)到服务器部分。

最后,为了解决边框问题,您应该使用colour = NA代替colour = FALSE. 第二种方法适用于 ggplot2,但不适用于 plotly。我不知道究竟是为什么。也许有人可以澄清这一点。

因此,您的代码应如下所示:

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

dataToPlot <- data.frame(Freq = c(0.0000000, 0.7092199, 1.4184397, 2.1276596, 2.8368794),
                         variable = rep('A',5), 
                         value = c(43089.76, 62923.17, 35446.15, 29553.76, 22433.08))

ui <- fluidPage( 
  useShinyjs(),
  fluidRow( 
    column(8,
           plotlyOutput("plot")
    )
  )
)

server <- function(input, output) {
  output$plot <- renderPlotly({
    p <- ggplot(dataToPlot , aes(x=Freq, y = value, group = variable)) +
      geom_col(mapping = aes(col = variable, fill = variable), colour = NA,  alpha = 0.2, orientation = "x", position = "dodge") + 
      guides(color = FALSE)

    ggplotly(p)
  })
}

shinyApp(ui,server)
于 2020-06-17T15:32:38.733 回答