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

如何根据Plotly等值线图背景自动调整日期标签文字颜色?

问题:根据Plotly等值线图背景颜色自动调整标签文字颜色

我用R绘制了如下等值线图,并编写了函数筛选间隔60天的日期标签避免拥挤:

library(plotly)

n <- 100
mydf <- data.frame(
  col1 = rnorm(n),
  col2 = runif(n, min = 0, max = 10),
  col3 = runif(n, min = 0, max = 10)
)

start_date <- as.Date("2020-01-01")
end_date <- as.Date("2020-12-31")
mydf$point <- format(sample(seq(start_date, end_date, by="day"), n, replace = TRUE), "%Y-%m-%d")

mydf <- mydf[order(as.Date(mydf$point)), ]

filtered_dates <- mydf$point[1]
for (i in 2:nrow(mydf)) {
  if (as.Date(mydf$point[i]) >= as.Date(filtered_dates[length(filtered_dates)]) + 60) {
    filtered_dates <- c(filtered_dates, mydf$point[i])
  }
}
if (filtered_dates[length(filtered_dates)] != mydf$point[nrow(mydf)]) {
  filtered_dates <- c(filtered_dates, mydf$point[nrow(mydf)])
}

p <- plot_ly(data = mydf, x = ~col2, y = ~col3, z = ~col1, type = "contour")

x_min <- min(mydf$col2)
x_max <- max(mydf$col2)
y_min <- min(mydf$col3)
y_max <- max(mydf$col3)

for(i in 1:nrow(mydf)) {
  if (mydf$point[i] %in% filtered_dates) {
    x_pos <- max(min(mydf$col2[i], x_max), x_min)
    y_pos <- max(min(mydf$col3[i], y_max), y_min)
    
    label_x_pos <- jitter(x_pos, amount = 0.5)
    label_y_pos <- jitter(y_pos, amount = 0.5)
    
    p <- p %>% 
      add_annotations(x = label_x_pos, 
                      y = label_y_pos, 
                      text = paste0("• <b>", mydf$point[i], "</b>"), 
                      showarrow = FALSE,
                      font = list(size = 12, color = 'black'))
  }
}

p

等值线图示例

我希望修改该图表,让深色区域附近的日期标签显示为白色,浅色区域附近的日期标签显示为黑色,以此提升标签的可见性。

我自己想到了一个思路:

  • 针对每个标签,识别其周围(比如各方向5像素)的所有像素颜色
  • 计算这些像素的平均颜色,若平均值超过阈值"c"则用黑色,否则用白色

但我不知道如何获取Plotly图表的底层颜色,恳请指导实现方法。

参考方向:

  • 根据柱状图填充深度控制标签颜色
  • 根据柱状图颜色自动调整标签颜色
  • 标签与背景对比度:判断颜色深浅
  • ggplot2中根据背景修改数据标签颜色(geom_segment)
  • 根据相对值自动调整标签颜色(最大值/最小值)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.19 09:12:26