You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

ggplotly转换ggplot2图表后轴文本粗体样式丢失的解决方法咨询

Fixing Bold Axis Text When Converting ggplot to plotly

I've run into this exact issue before—ggplotly doesn't always carry over global text styles perfectly. Here are two reliable ways to get your bold axis text back in the interactive plot:

Option 1: Target Axis Text Directly in ggplot

Instead of setting bold text globally with text = element_text(), explicitly define the style for axis text elements. This ensures ggplotly correctly picks up the bold attribute during conversion:

p <- ggplot(df) + 
  geom_line(aes(y = average, x = year), colour = "#8B572A") + 
  geom_ribbon(aes(ymin = min, ymax = max, x = year), fill = "#8B572A", alpha = 0.3) + 
  theme(plot.background = element_rect(fill = '#F4F4F4'),
        panel.background = element_rect(fill = '#F4F4F4'),
        panel.grid.major.y = element_line(color = '#E7E7E7', size = 1),
        panel.grid.major.x = element_blank(),
        axis.title=element_blank(),
        # Specify bold style for x and y axis text separately
        axis.text.x = element_text(size = 15, face="bold", color = "black"),
        axis.text.y = element_text(size = 15, face="bold", color = "black"))

# Now convert to plotly—bold text will persist
fig <- ggplotly(p)

Option 2: Manually Set Tick Font in Plotly Layout

If you prefer to keep your original ggplot code intact, you can override the axis text style directly in the plotly layout using tickfont with the weight = "bold" parameter:

# Your original ggplot code remains unchanged
p <- ggplot(df) + 
  geom_line(aes(y = average, x = year), colour = "#8B572A") + 
  geom_ribbon(aes(ymin = min, ymax = max, x = year), fill = "#8B572A", alpha = 0.3) + 
  theme(plot.background = element_rect(fill = '#F4F4F4'),
        panel.background = element_rect(fill = '#F4F4F4'),
        panel.grid.major.y = element_line(color = '#E7E7E7', size = 1),
        panel.grid.major.x = element_blank(),
        axis.title=element_blank(),
        text = element_text(size = 15, face="bold", color = "black"))

# Convert to plotly and adjust layout
fig <- ggplotly(p) %>%
  layout(
    xaxis = list(tickfont = list(size = 15, family = "arial", color = "black", weight = "bold")),
    yaxis = list(tickfont = list(size = 15, family = "arial", color = "black", weight = "bold"))
  )

Why This Happens

The global text = element_text() setting in ggplot applies to multiple elements (like titles, legends, etc.), but ggplotly doesn't always map this global style correctly to plotly's axis tick font properties. By targeting axis text specifically (either in ggplot or plotly), you ensure the bold style is applied exactly where you need it.

内容的提问来源于stack exchange,提问作者wit

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.27 14:42:42