簡體   English   中英

着色 R 中的可格式化數據表 - 股票數據

[英]Coloring Formattable Data Table in R - Stock Data

我有一個數據表,存儲了幾只股票的每日/每周/每月回報,我試圖用 R 的 formattable 包對這些股票進行着色。 我希望負回報為紅色,正回報為綠色。 或者為了花哨,為正值和負值設置單獨的漸變——所以如果蘋果一天下跌 10%,它將是深紅色,如果亞馬遜下跌 2%,該單元格將是淺紅色——反之亦然獲得正回報(淺綠色和深綠色)。

我的問題是,當我使用紅綠色漸變時,中間的顏色呈現褐色。 我下面的代碼將透明/白色作為漸變的低端,綠色作為高端,但很難區分。

我的數據表看起來像:

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 中運行它,不確定這是否會引發排序錯誤。

在此處輸入圖片說明

一個可能的解決方案是創建多個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))

在此處輸入圖片說明

它回答你的問題嗎?

可重現的例子

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>)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM