R Highcharter: подсказка по форматированию - PullRequest
0 голосов
/ 28 июня 2018

У меня есть график «с накоплением столбцов», и я помещаю его против более широкого столбца, чтобы увидеть, соответствует ли он моим критериям или нет. У меня есть график, выглядящий так, как я хочу, из-за хитрости (используя grouping = FALSE и сумма каждого столбца равна сумме перед ним). Проблема в том, что tooltip показывает неправильные числа (правильно).

Вопрос: Есть ли способ, которым я могу либо отформатировать всплывающую подсказку, чтобы показать, какие должны быть правильные числа (с включенной цветовой точкой), либо создать график другим способом?

enter image description here

Например, на рисунке показаны неправильные цифры на tooltip, я хочу, чтобы оно отображалось:

  • DIH Цель: 21 час.
  • Время удержания цитаты: 6,2
  • Другое время удержания: 19,3 часа
  • Время работы магазина: 3,4 часа

Код:

highchart() %>%
  hc_add_series(TopPN2, "column", hcaes(x = Incoming.P.N, y = 21), name = "DIH Goal", color = "#ffffff", borderColor = "#C8C8C8", pointPadding = -0.1) %>%
  hc_add_series(TopPN2, "column", hcaes(x = Incoming.P.N, y = round(HoldTime.Quote,1)), name = "Quote Hold Time", color = "#FF8888") %>%
  hc_add_series(TopPN2, "column", hcaes(x = Incoming.P.N, y = round(Hold.Time.Other,1)), name = "Other Hold Time", color = "#E5A919") %>%
  hc_add_series(TopPN2, "column", hcaes(x = Incoming.P.N, y = round(Shop.Time,1)), name = "Shop Time", color = "#51C1BC") %>%
  hc_xAxis(type = "category") %>%
  hc_yAxis(title = "hours", labels = list(format = "{value}hrs")) %>%
  hc_tooltip(crosshairs = TRUE, shared = TRUE, headerFormat = "<b>{point.name}</b>", valueSuffix = "hrs") %>%
  hc_plotOptions(column = list(grouping = FALSE))

Данные:

> dput(TopPN2)
structure(list(Incoming.P.N = c("PN1", "PN2", "PN3", "PN4", "PN5", 
"PN6", "PN7", "PN8", "PN9", "PN10"), HoldTime.Quote = structure(c(28.8846153846154, 
32.548, 21.8717948717949, 57.4931506849315, 64.4074074074074, 
40.0833333333333, 14, 29.680790960452, 36.6506024096386, 48.1111111111111
), class = "difftime", units = "days"), Hold.Time.Other = structure(c(22.7307692307692, 
21.56, 16.7435897435897, 10.7123287671233, 47.1851851851852, 
23.1666666666667, 6, 8.17231638418079, 25.1807228915663, 24.6666666666667
), class = "difftime", units = "days"), Shop.Time = c(3.40698998178506, 
4.83416980342953, 3.33075767332046, 4.39068799583821, 5.35449386300647, 
5.20028749401054, 3.43263196751569, 5.59119496855346, 4.27753861737149, 
5.61884753901561), Quantity = c(17568, 9564, 9318, 7689, 7577, 
6261, 5418, 5088, 3949, 3332)), .Names = c("Incoming.P.N", "HoldTime.Quote", 
"Hold.Time.Other", "Shop.Time", "Quantity"), row.names = c(NA, 
-10L), class = c("tbl_df", "tbl", "data.frame"))

UPDATE

Идем по пути простого форматирования tooltip. Я создал новые переменные для представления правильного времени, но не могу понять, как ввести правильные цветовые точки в tooltip. Пример, найденный здесь: Как использовать средство форматирования всплывающей подсказки и по-прежнему отображать цвет диаграммы (как это делается по умолчанию)? показывает, как это сделать в JS, но я не могу понять это в R. Моя проблема я не знаю, как использовать двойные кавычки между color span, чтобы заставить его подобрать правильный цвет.

Обновлены данные:

> dput(TopPN2)
structure(list(Incoming.P.N = c("PN1", "PN2", "PN3", "PN4", "PN5", 
"PN6", "PN7", "PN8", "PN9", "PN10"), Hold.Time.Quote = structure(c(28.8846153846154, 
32.548, 21.8717948717949, 57.4931506849315, 64.4074074074074, 
40.0833333333333, 14, 29.680790960452, 36.6506024096386, 48.1111111111111
), class = "difftime", units = "days"), Hold.Time.Other = structure(c(22.7307692307692, 
21.56, 16.7435897435897, 10.7123287671233, 47.1851851851852, 
23.1666666666667, 6, 8.17231638418079, 25.1807228915663, 24.6666666666667
), class = "difftime", units = "days"), Shop.Time = c(3.40528709494031, 
4.83058282849384, 3.33075767332046, 4.38978424746556, 5.35178594965072, 
5.19380460683082, 3.43263196751569, 5.59119496855346, 4.27753861737149, 
5.61884753901561), Quantity = c(17590, 9574, 9318, 7694, 7587, 
6295, 5418, 5088, 3949, 3332), HoldTimeQuoteTrue = structure(c(6.2, 
11, 5.1, 46.8, 17.2, 16.9, 8, 21.5, 11.5, 23.4), class = "difftime", units = "days"), 
    HoldTimeOtherTrue = structure(c(18.8, 16.8, 13.7, 5.7, 38.6, 
    15.3, 0, 1.9, 20, 15.4), class = "difftime", units = "days"), 
    ShopTimeTrue = c(3.4, 4.8, 3.3, 4.4, 5.4, 5.2, 3.4, 5.6, 
    4.3, 5.6)), .Names = c("Incoming.P.N", "Hold.Time.Quote", 
"Hold.Time.Other", "Shop.Time", "Quantity", "HoldTimeQuoteTrue", 
"HoldTimeOtherTrue", "ShopTimeTrue"), row.names = c(NA, -10L), class = c("tbl_df", 
"tbl", "data.frame"))

Обновлен код:

highchart() %>%
  hc_add_series(TopPN, "column", hcaes(x = Incoming.P.N, y = 21), name = "DIH Goal", color = "#ffffff", borderColor = "#C8C8C8", borderWidth = 2, pointPadding = -0.1, 
                tooltip = list(pointFormat = "DIH Goal: 21 days<br>")) %>%
  hc_add_series(TopPN, "column", hcaes(x = Incoming.P.N, y = round(Hold.Time.Quote,1)), name = "Quote Hold Time", color = "#FF8888", 
                tooltip = list(pointFormat = "<span style='color:{point.color}'>\u25CF</span> Quote Hold Time: {point.HoldTimeQuoteTrue} days<br>")) %>%
  hc_add_series(TopPN, "column", hcaes(x = Incoming.P.N, y = round(Hold.Time.Other,1)), name = "Other Hold Time", color = "#E5A919", 
                tooltip = list(pointFormat = "{point.color} Other Hold Time: {point.HoldTimeOtherTrue} days<br>")) %>%
  hc_add_series(TopPN, "column", hcaes(x = Incoming.P.N, y = round(Shop.Time,1)), name = "Shop Time", color = "#51C1BC", 
                tooltip = list(pointFormat = "Shop Time: {point.ShopTimeTrue} days<br>Volume: {point.Quantity}")) %>%
  hc_xAxis(type = "category") %>%
  hc_yAxis(title = "days", labels = list(format = "{value} days")) %>%
  hc_tooltip(crosshairs = TRUE, shared = TRUE, 
             headerFormat = "<b>PN {point.key}</b><br>"
             ) %>%
  hc_plotOptions(column = list(grouping = FALSE, events = list(click = ClickFunctionCustReviewPN)))

1 Ответ

0 голосов
/ 02 июля 2018

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

Вот модификация демонстрационной диаграммы с накопленными столбцами Highcharts с образцом линии графика: https://jsfiddle.net/brightmatrix/v3e7gouz/

yAxis: {
    ...
    plotLines: [{ 
        color: 'red', 
        value: 5, // the value on the y-axis were you want the line to appear
        width: 2, 
        zIndex: 1 // set this value to have the line appear above the y-axis gridline but below the column bars
    }],
    ...
}

enter image description here

Надеюсь, это полезно для вас.

...