Give custom name to legend items in ggplotly object
Nobody has claimed this yet.
- Dominant language
- R
- Stars
- 2.7k
- Forks
- 641
- PR merge metrics
- No merged PRs in 30d
Description
Hi,
I want to make the legend items to be displayed by the choice of inputs and having an "and" between two variables.
I added my sample shiny app, which demonstrates the need for this.
I can change the legend items in ggplot itself. But ggplotly object doesn't reflect this change.
If anybody help me on this, I would be appreciated.
Thank you.
Mustafa
library(data.table)
library(shiny)
library(plotly)
library(shinycssloaders)
global.R file:
df <- data.frame(gender=rep(c("Male", "Female", "Both gender"), each=12, times=3),
age.group=rep(c("15 years and over", "15 to 19 years", "15 to 64 years"), each=36, times=1),
rate=rnorm(108, mean=5, sd=1),
date=rep(seq(as.Date('1976-01-01'),as.Date('1977-01-01'),by = 31), times=9))
df <- as.data.table(df)
mycolor12 = c("#bdc9e1","#55aadb","#016c59", "#FF8C00", "#EE3B3B", "#EEC591", "#00FFFF",
"#8B7500", "#AB82FF", "#FFFFE0", "#FFE1FF", "#8B7E66")
ui.R file:
navbarPage("Sample app",
navbarMenu('First dataset',
tabPanel("Second navigation bar",
fluidRow(
column(3,
wellPanel(
checkboxGroupInput("gender", label = "Gender",
choices = c(
"Both gender",
"Male",
"Female"),
selected = "Both gender"
),
checkboxGroupInput("agegroup", label = "Age group",
choices = c(
"15 years and over",
"15 to 19 years",
"15 to 64 years"),
selected = "15 years and over"
)
),
width=4,
height=110
),
hr(),
column(9,
plotlyOutput('plot_interactive', width=1000, height =450) %>%
withSpinner(color="#0dc5c1"))
)
)
)
)
server.R file:
function(input, output,session){
df_interactive <- reactive({
df[age.group %in% input$agegroup &
gender %in% input$gender]
})
target_plot <- reactive({
p <- ggplot(df_interactive(), aes(x=date, y=rate, colour = interaction(age.group, gender)))+
geom_line(aes(color=interaction(age.group, gender)), size=0.5)+
labs(y = "", x = "") +
scale_color_manual(values = mycolor12, name = '',
labels = paste(input$agegroup, input$gender, sep=" and "),
guide = guide_legend(
title="",
direction = "vertical",
label.position = "right",
label.hjust = 0.5,
label.vjust = 1
))+
scale_y_continuous(labels = scales::percent) +
scale_x_date(date_breaks = "1 year", date_labels = "%Y")
p <- ggplotly(p) %>% config(displayModeBar = F) %>%
layout(legend = list(orientation = "v", x = 1, y=0.3, font = list(size = 10, bgcolor = 'rgb(251)')))
})
output$plot_interactive <- renderPlotly({
target_plot()
})
}
Contributor guide
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
Research direction
Run the sample Shiny app from ui.R, server.R, and global.R, then inspect target_plot where ggplotly converts the ggplot legend. Compare the requested labels from scale_color_manual with the interactive legend output; done means the ggplotly legend displays the selected inputs joined with "and".
Written by the indexing model from the issue text.
Assessment
- Tech stack
- r
- Domain
- data-visualization
- Issue type
- Feature
- Difficulty
- 4/5
- Estimated time
- 3-5 days
- Activity status
- Stale
- Clarity
- Needs clarification
- Newbie friendliness
- 35/100