【问题标题】:TickWidth 0 for Categories (not in grouped category)类别的 TickWidth 0(不在分组类别中)
【发布时间】:2020-07-20 17:34:34
【问题描述】:

我正在尝试在高图中的 x 轴上对类别进行分组。它工作正常。我想隐藏 Jan-Dec 标签中的刻度,但在 Q1-Q4 标签中显示刻度。如果我使用 tickwidth = 0 它会删除两个类别的刻度。我只想在分组类别中显示它。

注意:我也愿意接受 highcharts 解决方案(不仅仅是 highcharts 的 R 包装器)

library(purrr) # map function to make grouped categories argument
library(dplyr) # for select function 

df1 = data.frame("label"= c('Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun',
                            'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'),
                 "label2" = c('Q1', 'Q1', 'Q1', 'Q2', 'Q2', 'Q2',
                              'Q3', 'Q3', 'Q3', 'Q4', 'Q4', 'Q4'),
                 "value" = c(49.9, 71.5, 106.4, 129.2, 144.0, 176.0, 135.6, 148.5, 216.4, 194.1, 95.6, 54.4)
)

categories_grouped <- df1 %>% 
  group_by(name = label2) %>% 
  do(categories = .$label) %>% 
  list_parse()

highchart() %>% 
  hc_xAxis(categories = categories_grouped,
           labels =  list(rotation = 0, style = list(color = '#3777ac', fontWeight = '400'),
                          groupedOptions = list(list(style = list(color = '#3777ac', fontWeight = '600'))))) %>% 
  hc_add_series(data = df1, type = "column", hcaes(y = value),
                showInLegend = FALSE) 

【问题讨论】:

    标签: highcharts r-highcharter


    【解决方案1】:

    很遗憾,通过 API 是不可能的。这些线被生成并显示为一条路径。改变这种行为的唯一方法是改变核心代码。我找到了一个我设法做到的地方(代码很糟糕,但这只是一个例子),但我编辑的函数是私有的,我在 Highcharter 中看不到任何编辑它的方法强>。

    查看这个 jsFiddle:https://jsfiddle.net/BlackLabel/b3s4c7no/

    var i = 0;
      // Pushes part of grid to path
      function addGridPart(path, d, width) {
        // Based on crispLine from HC (#65)
        if (i === 1 || i === 3 || i === 5 || i === 7 || i === 9) {
          if (d[0] === d[2]) {
            d[0] = d[2] = -9999;
          }
        } else {
          if (d[0] === d[2]) {
            d[0] = d[2] = mathRound(d[0]) - (width % 2 / 2);
          }
        }
        i++;
    
        if (d[1] === d[3]) {
          d[1] = d[3] = mathRound(d[1]) + (width % 2 / 2);
        }
    
        path.push(
          'M',
          d[0], d[1],
          'L',
          d[2], d[3]
        );
      }
    

    【讨论】:

    • 谢谢。由于我是 R 用户,我需要了解如何在 R 中实现您建议的代码。代码是否动态 - 我的意思是它是否适用于 x 轴上的 N 个类别(# 个类别可以更改)
    • 不,抱歉,它不是动态的。我硬编码删除了一些路径线坐标(1、3、5、7 和 9)。找到一个合适的方法来做这件事很费时间
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-03-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-03
    • 2017-08-23
    相关资源
    最近更新 更多