Highcharter黑白柱状图图案填充的代码报错与无数据问题咨询
两段代码的错误定位与修正方案
第一版代码报错原因
- 核心结构错误:
hc_series()参数括号完全错位。Var2、Var3、Var4三个独立的数据系列,被全部嵌套塞进Var2的列表参数内部,函数读取到的options是层级混乱的非规范列表结构,直接触发'options' must be a fully named list报错。 - 无效配置:为面积图写的
hc_plotOptions(area = ...)、为折线图写的hc_plotOptions(line = ...)规则,对当前column类型的柱状图完全不生效——两类配置分别是面积图、折线图的专属字段,柱状图不会读取。 - 冗余配置:连续两次调用
hc_legend()属于无效操作,同类型配置会被后一次调用整体覆盖,不会叠加生效。 - 拼写错误:
datalabels = list(emabled = TRUE)中的emabled为拼写错误,正确值为enabled,该错误不会触发核心报错。
第二版代码无渲染原因
- 管道语法断裂:第一个
hc_add_series(list(name = "Var1", ...)的列表缺少右闭合括号,导致后续所有hc_add_series的调用都被嵌进第一个系列的参数内部,Highcharter根本解析不到合法的独立系列数据,因此图表无任何内容渲染。 - 图案填充逻辑错误:柱状图的填充色通过
color字段传入,单独设置的fillColor = list(pattern=...)对柱状图无效,必须将整个带图案的配置对象作为color属性值传入,才能被识别。 - 无效配置:为面积图、折线图写的对应plotOptions规则,对当前column类型的图表无任何作用。
可直接运行的修正代码
# 定义三种差异化黑白图案,避免三个非实心系列视觉无法区分 pattern_diag_right <- list( path = list(d = "M 0 0 L 10 10 M 9 -1 L 11 1 M -1 9 L 1 11", strokeWidth = 2), width = 10, height = 10 ) pattern_diag_left <- list( path = list(d = "M 10 0 L 0 10 M -1 1 L 1 -1 M 9 11 L 11 9", strokeWidth = 2), width = 10, height = 10 ) pattern_dot <- list( path = list(d = "M 5 5 L 5.1 5.1", strokeWidth = 3), width = 10, height = 10 ) Column_with_stripe_fixed <- highchart() %>% hc_chart(type = "column") %>% hc_title(text = "A") %>% hc_add_dependency("modules/pattern-fill.js") %>% hc_add_theme(hc_theme_tufte()) %>% hc_legend( align = "Right", verticalAlign = "top", floating = TRUE, borderRadius = 10, backgroundColor = "white", borderWidth = 1, layout = "vertical", x = 50, y = -5, enabled = TRUE ) %>% hc_xAxis( categories = c('Day 1-7', 'Day 7-14', 'Day 14-21', 'Day 21-28', 'Day 28-35', 'Day 35-42'), tickmarkPlacement = "on" ) %>% hc_yAxis(title = list(text = "Catch of fly per week")) %>% # 第一个系列:纯黑实心填充 hc_add_series( name = "Var1", data = c(5,8,25,10,28,15), color = "#000000" ) %>% # 后续三个系列:白底黑线条的差异化图案填充 hc_add_series( name = "Var2", data = c(4,5,1,6,4,3), color = list( pattern = modifyList(pattern_diag_right, list(color = "#000000", backgroundColor = "#ffffff")) ) ) %>% hc_add_series( name = "Var3", data = c(0,35,18,38,19,18), color = list( pattern = modifyList(pattern_diag_left, list(color = "#000000", backgroundColor = "#ffffff")) ) ) %>% hc_add_series( name = "Var4", data = c(6,8,29,52,33,48), color = list( pattern = modifyList(pattern_dot, list(color = "#000000", backgroundColor = "#ffffff")) ) ) Column_with_stripe_fixed
内容的提问来源于stack exchange,提问作者cookie16nz
相关产品推荐
相关产品推荐

