如何根据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
相关产品推荐
相关产品推荐

