Ручные метки осей в Highcharter

Поскольку highcharts не предоставляет функции для пирамид населения, я вручную сфальсифицировал ее, используя столбчатый тип графика, присвоив отрицательные значения данным для одной стороны пирамиды. Единственная проблема, с которой я столкнулся, заключается в том, что я не могу понять, как перезаписать метки оси x, чтобы я мог отображать эти значения как положительные.

Я также манипулировал функциями заголовков и подзаголовков, чтобы создавать заголовки для обеих сторон пирамиды.

Вот пример кода:

data <- data.frame(x=as.factor(c(seq(1,10,1), seq(1,10,1))), 
                   y=sample(10:20, size=20, replace=T), 
                   group=c(rep(1,10), rep(2,10)))
data <- data %>%
  mutate(y = ifelse(group == 1, (-1)*y, y))

highchart() %>%
  hc_add_series(
    data,
    type = "bar",
    hcaes(
      x = x,
      y = y,
      group = group
    ), showInLegend = F) %>% 
  hc_plotOptions(bar = list(stacking = "normal")) %>% 
  hc_title(text = "Group 1", align= "center", x = -115, y=20, margin=0,
           style = list(fontSize = "12px", color = "#0d233a")) %>%
  hc_subtitle(text = "Group 2", align= "center", y=20, margin=0,
              x = 130, style = list(fontSize = "12px", color = "#2f7ed8"))

Мой главный вопрос заключается в том, как вручную перезаписать ось x, чтобы левой стороне пирамиды можно было присвоить положительные метки оси. Кроме того, если у кого-то есть идея о том, как центрировать заголовок и подзаголовок программно, чтобы они находились в центре каждой стороны пирамиды, это было бы замечательно.

Я попытался сделать ось x категоричной и использовать опцию «категории» для назначения меток, но почему-то вместо 0 отображается 20, и я не могу понять, почему и как это исправить.

ylim <- plyr::round_any(max(abs(data$y), na.rm=T), 5)
highchart() %>%
  hc_add_series(
    data,
    type = "bar",
    hcaes(
      x = x,
      y = y,
      group = group
    ), showInLegend = F) %>% 
  hc_plotOptions(bar = list(stacking = "normal")) %>% 
  hc_title(text = "Group 1", align= "center", x = -115, y=20, margin=0,
           style = list(fontSize = "12px", color = "#0d233a")) %>%
  hc_subtitle(text = "Group 2", align= "center", y=20, margin=0,
              x = 130, style = list(fontSize = "12px", color = "#2f7ed8")) %>%
  hc_yAxis(type = "category", categories = as.factor(c(rev(seq(0,ylim,5)),
                                                     seq(5,ylim,5))), tickInterval=5)

Я был бы очень признателен за вашу помощь! Я также открыт для совершенно другого подхода к построению пирамиды населения с использованием пакета highcharter.

Laravel с Turbo JS
Laravel с Turbo JS
Turbo - это библиотека JavaScript для упрощения создания быстрых и высокоинтерактивных веб-приложений. Она работает с помощью техники под названием...
Типы ввода HTML: Лучшие практики и советы
Типы ввода HTML: Лучшие практики и советы
HTML, или HyperText Markup Language , является стандартным языком разметки, используемым для создания веб-страниц. Типы ввода HTML - это различные...
Аутсорсинг разработки PHP для индивидуальных веб-решений
Аутсорсинг разработки PHP для индивидуальных веб-решений
Услуги PHP-разработки могут быть экономически эффективным решением для компаний, которые ищут высококачественные услуги веб-разработки по доступным...
Понимание Python и переход к SQL
Понимание Python и переход к SQL
Перед нами лабораторная работа по BloodOath:
Слишком много useState? Давайте useReducer!
Слишком много useState? Давайте useReducer!
Современный фронтенд похож на старую добрую веб-разработку, но с одной загвоздкой: страница в браузере так же сложна, как и бэкенд.
Узнайте, как использовать теги &lt;ul&gt; и &lt;li&gt; для создания неупорядоченных списков в HTML
Узнайте, как использовать теги <ul> и <li> для создания неупорядоченных списков в HTML
HTML предоставляет множество тегов для структурирования и организации содержимого веб-страницы. Одним из наиболее часто используемых тегов для...
2
0
50
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Поскольку у вас есть значения по оси X, Highcharts воспринимает y как x, а x как y. (Мне потребовалась минута, чтобы понять, почему он меня не слушает.)

В коде R вы увидите вызов hc_yAxis(). Функция formatter изменит ваши метки по оси X на их абсолютные значения.

highchart() %>%
  hc_add_series(data, type = "bar", hcaes(x = x, y = y, group = group), 
                showInLegend = F) %>% 
  hc_plotOptions(bar = list(stacking = "normal")) %>% 
                        # format the labels on the x-axis (y-axis per HC)
  hc_yAxis(labels = list(formatter = htmlwidgets::JS( 
    "function() {
        return Math.abs(this.value); /* all labels to absolute values */
    }"
  ))) %>% 
  hc_title(text = "Group 1", align = "center", x = -115, y = 20, margin = 0,
           style = list(fontSize = "12px", color = "#0d233a")) %>%
  hc_subtitle(text = "Group 2", align = "center", y = 20, margin = 0,
              x = 130, style = list(fontSize = "12px", color = "#2f7ed8"))

Другие вопросы по теме