plotly / plotly/plotly.R

Long x labels in subplot() get cut off from plot

Offen
#1,760 1 Kommentar 0 Reaktionen 0 zugewiesene Personen Auf GitHub ansehen

Dieses Issue hat noch niemand übernommen.

plotly.js
Vorherrschende Sprache
R
Sterne
2.7k
Forks
641
PR-Merge-Kennzahlen
Keine gemergten PRs in 30 T.

Beschreibung

I've created a shiny app that uses plotly::subplot(), and one of the interactive aspects of this app is that the size of the label can vary depending on user selection.

I've noticed that if there is a label that is really long (in my app the "magic number" is 55 characters, in the following reprex it is higher), that label length is ignored for sizing the plots, even with automargin = TRUE.

library(shiny)
library(plotly)
library(dplyr)
library(purrr)

#Creating dataset with 3 different sample groups, each one with 2 levels
group1 <- c("G1", "G2")
group2 <- c("Longer labels make the plot area smaller", "That's nice!")
group3 <- c("Really long labels get cut off the plot, I don't know why, that's weird", "Another label")

groups <- c("Group1", "Group2", "Group3")

df <-  as.data.frame(do.call(paste0, replicate(50, sample(LETTERS, 10, TRUE), FALSE)))

df <- df %>%
  mutate(Group1 = sample(group1, nrow(.), replace = TRUE),
         Group2 = sample(group2, nrow(.), replace = TRUE),
         Group3 = sample(group3, nrow(.), replace = TRUE),
         value = rnorm(nrow(.), 0,10))

#App
ui <- fluidPage(
  titlePanel("Testing large labels"),
  
  sidebarLayout(
    sidebarPanel(
      checkboxGroupInput("groups", "Select Groups", choices = groups, selected = groups[1])
      ),
    
    mainPanel(plotlyOutput("plots", height = "700px"))
  )
)

server <- function(input, output) {

  list_of_plots <- reactive({
    
    purrr::map(input$groups, .f = function(group){

    plot_ly(
      df,
      x = df[[group]],
      y = df$value,
      type = 'violin',
      hoverinfo = 'text',
      showlegend = FALSE,
      box = list(
        visible = TRUE
      ),
      meanline = list(
        visible = TRUE
      ))%>%
      layout(
        autosize = TRUE,
        xaxis = list(automargin = TRUE,
                     tickangle = 80)
      )
  })
})

  output$plots <- renderPlotly(

    plotly::subplot(list_of_plots(), shareX = TRUE, shareY = TRUE)
  )
}


shinyApp(ui, server)

In the app, we have the following behavior, based on the selected groups:

  • Group1 + Group2: plot size is adjusted to the longer label in Group2. (the expected behavior)
  • Group1 + Group2 + Group3: long label in group 3 gets cut off
  • Group1 + Group3: only the labels in Group1 are used to define the plot size.

In my app, I was able to change the long label to a shorter version, but I was wondering if there is any workaround around this problem.

Beitragsleitfaden

Beitragsleitfaden öffnen

Erste Schritte

  1. Lies das ganze Issue und danach den Beitragsleitfaden des Projekts.
  2. Schreib ins Issue, dass du es übernimmst — das erspart doppelte Arbeit.
  3. Forke das Repository und arbeite in einem Branch.
  4. Öffne einen Pull Request, der die Issue-Nummer nennt.

Rechercherichtung

Beginnen Sie damit, das bereitgestellte R/Shiny-reprex auszuführen und plotly::subplot() zusammen mit den Einstellungen xaxis automargin und tickangle zu untersuchen. Die Aufgabe ist erledigt, wenn die längsten x-Achsenbeschriftungen sichtbar bleiben, wenn Group1, Group2 und Group3 ausgewählt sind, einschließlich des Falls Group1 + Group3.

Vom Indexierungsmodell aus dem Issue-Text verfasst.

Bewertung

Tech-Stack
r
Bereich
data-visualization
Issue-Typ
Bug
Schwierigkeit
3/5
Geschätzter Aufwand
1-2 Tage
Aktivitätsstatus
Veraltet
Klarheit
Größtenteils klar
Anfängerfreundlichkeit
45/100

Neue Issues direkt in Ihr Postfach

Eine kurze Übersicht über anfängerfreundliche GitHub-Issues.