Раскраска таблицы форматируемых данных в R - Stock Data - PullRequest
1 голос
/ 03 марта 2020

У меня есть дата, хранящая ежедневные / еженедельные / ежемесячные отчеты по нескольким акциям, которые я пытаюсь раскрасить с помощью форматируемого пакета R. Я хочу, чтобы отрицательные результаты были красными, а положительные - зелеными. Или чтобы получить фантазию, используйте отдельный градиент для положительных и отрицательных значений - так, если бы Apple снизился на 10% за день, он был бы темно-красным, а если бы Амазон снизился на 2%, эта ячейка была бы более светло-красной - и наоборот для положительных результатов (светлый и темно-зеленый).

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

Мои данные выглядят примерно так:

Stock day  week   month
AAPL   1.5  3.2   10.6
AMZN   3.2  5.3   4.4
BA    -2.1 -4.0  -10.5
PYPL   -5  -8.5  -12.1



Green <- "#71ca99"

sign_formatter <- formatter("span", 
                            style = x ~ style(color = ifelse(x > 0, "green", 
                                                             ifelse(x < 0, "red", "black"))))
sign_formatter(c(-1, 0, 1))

returns <- formattable(stocks_df, align =c("l","c","c","c","c"), list(
  `Stock` = formatter("span", style = ~ style(color = "grey",font.weight = "bold")), 
  daily_return = color_tile("transparent", Green),
  week_return = color_tile("transparent", Green),
  month_return = color_tile("transparent", Green)))

@ dc37

Я использую точный код, который вы предложили - цвета работают отлично. Но когда я сортирую по еженедельной доходности, как в примере ниже, чтобы получить акции с наилучшей производительностью за неделю, это не сортировка по возрастанию к минимуму (с той же проблемой, когда я пытаюсь сортировать по худшим акциям).

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

enter image description here

1 Ответ

2 голосов
/ 03 марта 2020

Возможным решением будет создание нескольких операторов ifelse для установки 5 различных цветов (красный / светлый / белый / светло-зеленый / зеленый) в зависимости от значения каждого столбца.

Здесь, Возможный способ сделать это:

Test <- formatter("span",
                  style = x ~ style(display = "block", font.weight = "bold",color = "black","border-radius" = "4px",
                                 "padding-right" = "4px",
                                 "background-color" = ifelse(x <= -10, "red", ifelse(x > -10 & x <= -2, "tomato", ifelse(x > -2 & x <= 2, "white", ifelse(x > 2 & x <= 10, "palegreen",ifelse(x > 10, "green",NA)))))),
                  x ~ percent(x/100))

formattable(stocks_df,align =c("l","c","c","c","c"), list(
  `Stock` = formatter("span", style = ~ style(color = "grey",font.weight = "bold")),
  day = Test,
  week = Test, 
  month = Test))

enter image description here

Это ответ на ваш вопрос?

Воспроизводимый пример

structure(list(Stock = c("AAPL", "AMZN", "BA", "PYPL"), day = c(1.5, 
3.2, -2.1, -5), week = c(3.2, 5.3, -4, -8.5), month = c(10.6, 
4.4, -10.5, -12.1)), row.names = c(NA, -4L), class = c("data.table", 
"data.frame"), .internal.selfref = <pointer: 0x55b7eeb735c0>)
...