Установить размер текста в пределах маркера на графике - PullRequest
1 голос
/ 06 ноября 2019

Метки внутри пузырьков появляются с размером, пропорциональным размеру аргумента. Однако я хочу сохранить метки в постоянных размерах.

Какой аргумент я должен использовать, чтобы сохранить их в постоянном размере?

Код, который я использую, приведен ниже.

df = data.frame( x = c( 3, 2, 2, 4, 6, 8 ), y = c( 3, 2, 3, 4, 6, 7 ), size = c( 20, 20, 20, 30, 40, 40 ), labels = letters[1:6] )

evo_bubble <- function(plot_data ,x_var, y_var, z_var, t_var) {

  # Trasform data into dataframe and quos
  df <- data.frame(plot_data)
  xenc <- enquo(x_var)
  yenc <- enquo(y_var)
  zenc <- enquo(z_var)
  tenc <- enquo(t_var)
  df <- df %>% mutate( bubble_size = !!zenc*50 ) # Modify the denominator if you want to change the dimension of the bubble


  # Set parameters for the plot 
  bubble_pal <- c("white", "#AECEE8" )
  gray_axis <- '#dadada'
  font_size <- list(size = 12, family = 'Lato')
  width <- 0.5
  legend_name <- Hmisc::capitalize( quo_name(zenc) ) # WATCH OUT! it works only with the package with Hmisc
  decimal <- ',.2f'
  sep <- ','
  #x_name <- capitalize(quo_name(xenc))
  y_name <- Hmisc::capitalize(quo_name(yenc))

  p <- plot_ly(df, x = xenc, y = yenc, name = '', text = tenc, type = "scatter",  mode = 'markers+text', 
               hoverlabel = list(font = font_size), size = zenc, color = zenc, hoverinfo = "text+y", colors= bubble_pal,
               marker = list(size = df$bubble_size, line = list(color = gray_axis)) ) %>% hide_colorbar()

  p <- p %>%  layout(xaxis = list(zeroline = F,
                                  title = '',
                                  linecolor = gray_axis,
                                  titlefont = font_size,
                                  tickfont  = font_size,
                                  rangemode='tozero',
                                  gridcolor = gray_axis,
                                  gridwidth = width,
                                  hoverformat = decimal,
                                  mirror = "ticks",
                                  tickmode = 'array',
                                  tickcolor = gray_axis,
                                  linewidth = width,
                                  showgrid = F ),
                     yaxis = list(title = y_name,
                                  zerolinecolor = gray_axis,
                                  linecolor = gray_axis,
                                  mirror = "ticks",
                                  hoverformat = '.2f',
                                  linewidth = width,
                                  tickcolor = gray_axis,
                                  tickformat = '.2f',
                                  titlefont = font_size,
                                  tickfont  = font_size,
                                  showgrid = FALSE) ) %>%
    config(displayModeBar = F)

  return(p)
}


evo_bubble( df, x, y, size, labels )

Ожидаемое изображение:

enter image description here

Полученное изображение:

enter image description here

Пожалуйста, игнорируйте цвета в сюжете.

1 Ответ

1 голос
/ 07 ноября 2019

Вы можете использовать add_text для получения желаемого результата:

library(plotly)
library(dplyr)

DF = data.frame( x = c( 3, 2, 2, 4, 6, 8 ), y = c( 3, 2, 3, 4, 6, 7 ), size = c( 20, 20, 20, 30, 40, 40 ), labels = letters[1:6] )

evo_bubble <- function(plot_data, x_var, y_var, z_var, t_var) {
  # browser()
  # Trasform data into dataframe and quos
  DF <- data.frame(plot_data)
  xenc <- enquo(x_var)
  yenc <- enquo(y_var)
  zenc <- enquo(z_var)
  tenc <- enquo(t_var)
  DF <- DF %>% mutate( bubble_size = !!zenc*50 ) # Modify the denominator if you want to change the dimension of the bubble


  # Set parameters for the plot 
  bubble_pal <- c("white", "#AECEE8" )
  gray_axis <- '#dadada'
  font_size <- list(size = 12, family = 'Lato')
  width <- 0.5
  legend_name <- Hmisc::capitalize( quo_name(zenc) ) # WATCH OUT! it works only with the package with Hmisc
  decimal <- ',.2f'
  sep <- ','
  #x_name <- capitalize(quo_name(xenc))
  y_name <- Hmisc::capitalize(quo_name(yenc))

  p <- plot_ly(DF, x = xenc, y = yenc, name = '', type = "scatter",  mode = 'markers', 
               hoverlabel = list(font = font_size), size = zenc, color = zenc, hoverinfo = "text+y", colors= bubble_pal,
               marker = list(size = DF$bubble_size, line = list(color = gray_axis))) %>% 
    add_text(text = tenc, textfont = font_size, textposition = "middle center") %>% hide_colorbar()

  p <- p %>%  layout(xaxis = list(zeroline = F,
                                  title = '',
                                  linecolor = gray_axis,
                                  titlefont = font_size,
                                  tickfont  = font_size,
                                  rangemode='tozero',
                                  gridcolor = gray_axis,
                                  gridwidth = width,
                                  hoverformat = decimal,
                                  mirror = "ticks",
                                  tickmode = 'array',
                                  tickcolor = gray_axis,
                                  linewidth = width,
                                  showgrid = F ),
                     yaxis = list(title = y_name,
                                  zerolinecolor = gray_axis,
                                  linecolor = gray_axis,
                                  mirror = "ticks",
                                  hoverformat = '.2f',
                                  linewidth = width,
                                  tickcolor = gray_axis,
                                  tickformat = '.2f',
                                  titlefont = font_size,
                                  tickfont  = font_size,
                                  showgrid = FALSE) ) %>%
    config(displayModeBar = F)

  return(p)
}


evo_bubble( DF, x, y, size, labels )

Result

...