Skip to content

Legend position not preserved when converting ggplot2 to plotly #2407

Closed

Description

@emilianomm

Description

When converting a ggplot2 plot to plotly using ggplotly(), the legend position specified in theme(legend.position=...) is not preserved in the resulting plotly graph. This requires additional layout configuration after conversion.

Reproducible Example

library(ggplot2)
library(plotly)

# Sample data
set.seed(123)
data <- data.frame(
  category = LETTERS[1:10],
  value = runif(10),
  group = factor(rep(1:2, 5))
)

# Create ggplot with specified legend position
p <- ggplot(data) +
  aes(x = category, y = value, fill = group) +
  geom_col() +
  theme(legend.position = "bottom")  # This position is not preserved

# Convert to plotly
p_interactive <- ggplotly(p)

# Current workaround needed
p_interactive <- ggplotly(p) %>%
  layout(
    legend = list(
      orientation = "h",
      x = 0.5,
      y = -0.2,
      xanchor = "center",
      yanchor = "top"
    )
  )

Expected Behavior

The legend position specified in the ggplot2 theme should be automatically translated to the equivalent plotly layout configuration.

Actual Behavior

The legend position from ggplot2 is ignored, and the legend defaults to plotly's default position (right side). Manual configuration using layout() is required to achieve the desired legend position.

Environment Information

  • R version: 4.4.2
  • The plot is rendered inside a Shiny App

Additional Context

This affects the workflow when converting static ggplot2 visualizations to interactive plotly graphs, requiring additional code to maintain consistent legend positioning. It would be helpful if the conversion process could automatically map ggplot2's legend positions to plotly's layout configurations.

Activity

  1. added 3 commits that reference this issue on Jan 19, 2026
    89f9241
    aa51964
    e970a83
  2. added a commit that references this issue on Jan 20, 2026
    386506d
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions