Home > Back-end >  R: Are "Counts" Necessary for Interactive Plotly Titles?
R: Are "Counts" Necessary for Interactive Plotly Titles?

Time:02-23

I am working with the R Programming language.

Using the following link as a tutorial (enter image description here

Now, I am trying to get the "interactive text" to work:

# map projection
geo <- list(
    scope = 'north america',
    projection = list(type = 'azimuthal equal area'),
    showland = TRUE,
    landcolor = toRGB("gray95"),
    countrycolor = toRGB("gray80")
)

fig <- plot_geo(locationmode = 'USA-states', color = I("red"))

fig <- fig %>% add_markers(
  data = my_data, x = ~start_long, y = ~start_lat, alpha = 0.5
)


fig <- fig %>% add_markers(
  data = my_data, x = ~start_long, y = ~start_lat, text = ~type1, size = ~count, hoverinfo = "text", alpha = 0.5
)


fig <- fig %>% add_segments(
    data = group_by(my_data, type),
    x = ~start_long, xend = ~end_long,
    y = ~start_lat, yend = ~end_lat,
    alpha = 0.3, size = I(1), hoverinfo = "none"
)

fig <- fig %>% layout(
    title = 'Plot 1',
    geo = geo, showlegend = FALSE, height=800
)

fig

enter image description here

The interactive text is now working, but the data points are appearing "much bulkier".

My Question: Is it possible to make the interactive text work, but have the data points appear the same way they do in the first picture?

I originally tried to do this without a "count" variable:

fig <- fig %>% add_markers(
  data = my_data, x = ~start_long, y = ~start_lat, text = ~type1, hoverinfo = "text", alpha = 0.5
)

But when I do this, the interactive text isn't working - the interactive text only works when a "count" variable is added.

Is this "count" variable necessary? Can someone please show me how to fix this?

Thanks!

CodePudding user response:

You don't need to use count. However, there is something odd here with the segments. Either way, this achieves what I think you're looking for.

I have provided two examples because you didn't say what you wanted to have in the hover text. In the first example, I just use the x and y (lat and long). In the second, I used custom hover content.

Everything that precedes the creation of fig was left unchanged.

Notable changes:

  • the order the fig elements are assembled; segments seems to only work if it is before the markers
  • hoverinfo for the segments add is now set to text--this didn't add hover content, but for some reason none here was a problem...odd
  • I dropped a call to fig or two, that seemed to be doing nothing...
  • in add_markers, this changed differently in the two options
    • in one, hovertext = "text" was changed to hovertext = "lat lon"
    • in the other, there were multiple changes--you'll have to look at the code for this one
  • in layout, I deleted the height argument; it's ignored
fig <- plot_geo(locationmode = 'USA-states', color = I("red"))
fig <- fig %>% add_segments( # add segments
  data = group_by(my_data, type),
  x = ~start_long, xend = ~end_long,
  y = ~start_lat, yend = ~end_lat,
  alpha = 0.3, size = I(1), hoverinfo = "text" # changed hoverinfo
)
fig <- fig %>% add_markers(
  data = my_data, x = ~start_long, y = ~start_lat,
  alpha = 0.5, hoverinfo = "lat lon"           # changed hoverinfo
)
fig <- fig %>% layout(
  title = 'Plot 1',
  geo = geo, showlegend = FALSE  # removed height argument
  )

#final result
fig

enter image description here

Here's the custom text version

fig <- plot_geo(locationmode = 'USA-states', color = I("red"))
fig <- fig %>% add_segments( # add segments
  data = group_by(my_data, type),
  x = ~start_long, xend = ~end_long,
  y = ~start_lat, yend = ~end_lat,
  alpha = 0.3, size = I(1), hoverinfo = "text" # changed hoverinfo
)
fig <- fig %>% add_markers(
  data = my_data, x = ~start_long, y = ~start_lat,
  alpha = 0.5, hoverinfo = "text",          # hoverinfo unchanged
  text = ~paste0("Longitude: ",             # text changed here**
                 round(my_data$start_long, 2),
                 "<br>Latitude: ", 
                 round(my_data$start_lat, 2))
  )
fig <- fig %>% layout(
  title = 'Plot 1',
  geo = geo, showlegend = FALSE  # removed height argument
)

#final result
fig

enter image description here

Let me know if you have any questions!

  • Related