Highchart: Могу ли я использовать другую переменную в качестве меток данных?

Я пытаюсь построить столбчатую диаграмму через highchart в r studio. Я преобразовал значения в%, так как я хочу, чтобы график отображал%, но я хочу, чтобы метки данных отображали значение, есть ли способ сделать это?

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

Это мой текущий код:

    hc <- highchart() %>%
  hc_title(text= "Gender - London")%>%
  hc_colors('#71599b') %>%
  hc_yAxis(max = 0.7) %>%
  hc_xAxis(categories = Sex$Gender) %>%
  hc_add_series(name = "London", type = "column",
                data = Sex$LON_PERC, dataLabels = list(enabled=TRUE, format={Sex$London}) ) 

Итак, я поместил Sex $ LON_PERC (% в Лондоне) в качестве данных для построения графика, а Sex $ London - в качестве меток данных.

Но этот код помещает все значения London в каждую метку данных.

введите здесь описание изображения

Редактировать:

Это данные, которые я пытаюсь отобразить: LON_PERC по оси Y, пол по оси X и Лондон в качестве меток данных.

Gender    London    LON_PERC
Declined    5      0.000351247
Female    8230     0.578152441
Male      4640     0.325957148
No Data   1360     0.095539164

person MLPNPC    schedule 06.12.2017    source источник
comment
Прочтите информацию о Как задать хороший вопрос и как создать воспроизводимый пример. Это облегчит другим помощь вам.   -  person KoenV    schedule 06.12.2017
comment
Возможно, следующий вопрос / ответ могут помочь вам продвинуться вперед: Highcharts процент от общего количества для простой гистограммы.   -  person KoenV    schedule 06.12.2017
comment
@KoenV Я прочитал этот документ и подумал, что я правильно задаю вопрос? Что с этим не так? Заранее спасибо.   -  person MLPNPC    schedule 06.12.2017
comment
Пожалуйста, предоставьте минимальный набор данных, с помощью которого вы проиллюстрируете свою проблему. Вы можете использовать для этого dput. Вы также можете указать, что вы пытались решить вашу проблему.   -  person KoenV    schedule 06.12.2017
comment
Я мало что знаю о R, но в JS достаточно добавить еще одно свойство для каждой точки (в данном случае value) и установить dataLabels.format в "{point.value}". Живая демонстрация: jsfiddle.net/kkulig/usthns0x Возможно, вы считаю это полезным.   -  person Kamil Kulig    schedule 07.12.2017
comment
@KoenV Спасибо за ваше предложение, теперь я добавил в набор данных, приведенный выше код - это то, что я пытался сделать, чтобы метки данных отображали лондонские значения   -  person MLPNPC    schedule 07.12.2017


Ответы (2)


Мне довольно неудобно работать с пакетом «highcharter», так как он требует коммерческой лицензии, которой у меня нет.

Результат, которого вы хотите достичь, может быть достигнут с помощью следующего - довольно простого - кода, использующего функции base r или ggplot, которые являются бесплатными. Я покажу это с двумя фрагментами кода ниже.

### your data
Sex <- read.table(header = TRUE, text = 
            "Gender     London     LON_PERC
             Declined       5      0.000351247
             Female      8230      0.578152441
             Male        4640      0.325957148
            'No Data'    1360      0.095539164
                  ")

Решение с использованием базы r

Функция barplot возвращает вектор (когда besides ложно) с координатами всех средних точек нарисованных полос (если besides истинно, это матрица). Это дает нам X-координаты для установки текста над полосами, высоту полос, которые мы уже имеем в данных, которые мы строим, верно.

# Draw the barplot and store result in `mp`
mp <- barplot(Sex$LON_PERC,     # height of the bar 
    names.arg = Sex$Gender,     # x-axis labels
    ylim = c(0, 0.7),           # limits of y-axis
    col = '#71599b',            # your color
    main = "Gender - London")   # main title

# add text to the barplot using the stored values
text(x = mp,                    # middle of the bars 
    y = Sex$LON_PERC,           # height of the bars
    labels = Sex$London,        # text to display
    adj = c(.5, -1.5))          # adjust horizontally and vertically

Это дает следующий график:

введите здесь описание изображения

Решение на основе ggplot

library(ggplot2)

ggplot(aes(x = Gender, y =  LON_PERC), data = Sex) +
  geom_bar(stat = "identity", width = .60, fill = "#71599b" ) +    
  geom_text(aes(label = London), 
            position = position_dodge(width = .9), 
            vjust = -.3, size = 3, hjust =  "center") +
  theme_minimal() +
  scale_y_continuous(limits = c(0, 0.7), 
            breaks = seq(0.0, 0.7, by = 0.1), 
            minor_breaks = NULL) +
  labs(title = "Gender - London") + 
  theme(axis.title.y = element_blank(), axis.title.x = element_blank()) 

давая следующий сюжет:

введите здесь описание изображения

В обоих случаях многие характеристики могут быть адаптированы к вашим потребностям / пожеланиям.

Я надеюсь, что эти примеры вам пригодятся, даже если они созданы не с использованием highcharter.

person KoenV    schedule 08.12.2017
comment
Спасибо, я использовал версию ggplot, но поскольку я пытаюсь добавить график на панель управления с помощью ggplotly, все немного меняется, поэтому я подумал, что было бы полезно узнать, как это сделать с помощью highchart. - person MLPNPC; 08.12.2017
comment
@ManonLyn В таком случае, возможно, стоит перефразировать свой вопрос. Кажется, у вас проблема в том, чтобы включить ggplot график в панель управления с помощью ggplotly. - person KoenV; 09.12.2017
comment
На данный момент я использую метки данных на ggplot, а затем использую ggplotly, чтобы перенести эти графики на панель инструментов. Но я хочу иметь возможность размещать метки данных на диаграмме highchart, а затем добавлять их на панель мониторинга, я предпочитаю диаграммы высокого уровня на моих панелях мониторинга, но мне раньше не приходилось иметь разные метки данных, поэтому у меня есть этот конкретный вопрос. Я уже могу включить ggplot в панель управления с помощью ggplotly. - person MLPNPC; 11.12.2017

Я нашел обходной путь.

Итак, я могу добавить «всплывающую подсказку», которая появляется при наведении курсора на столбец / панель.

Во-первых, нужна функция:

myhc_add_series_labels_values <- function (hc, labels, values, text, colors= NULL, ...) 
{
  assertthat::assert_that(is.highchart(hc), is.numeric(values), 
                          length(labels) == length(values))
  df <- dplyr::data_frame(name = labels, y = values, text=text)
  if (!is.null(colors)) {
    assert_that(length(labels) == length(colors))
    df <- mutate(df, color = colors)
  }
  ds <- list_parse(df)
  hc <- hc %>% hc_add_series(data = ds, ...)
  hc
}

а затем при создании highchart необходимо вызвать эту функцию.

Данные выглядят следующим образом:

Sex <- read.table(header = TRUE, text = 
            "Gender     London     LON_PERC
             Declined       5      0.000351247
             Female      8230      0.578152441
             Male        4640      0.325957148
            'No Data'    1360      0.095539164
                  ")

Тогда код для генерации highchart:

Gender<- highchart() %>%
      hc_xAxis(categories = Sex$Gender, labels=list(rotation=0))%>%
      myhc_add_series_labels_values(labels = Sex$Gender,values=Sex$LON_PERC, text=Sex$London, type="column")%>%
      hc_tooltip(crosshairs=TRUE, borderWidth=5, sort=TRUE, shared=TRUE, table=TRUE,pointFormat=paste('<br>%: {point.y}%<br>#: {point.text}'))%>%
      hc_legend()

Это дает следующий результат:

введите здесь описание изображения

Затем, когда я нахожу указатель мыши на каждый столбец / столбец, он дает информацию о% и числовую информацию, как можно увидеть здесь:

введите здесь описание изображения

person MLPNPC    schedule 21.12.2017