Добавить тень / контур текста к текстовым меткам в R сюжетно - PullRequest
2 голосов
/ 12 февраля 2020

Я хотел бы посмотреть, смогу ли я добавить черный контур к белому тексту на диаграмме plotly в R.

Я нашел следующую ссылку, описывающую, как это можно сделать в plotly.js но не уверен, что это может быть сделано в R на данный момент. https://github.com/plotly/plotly.js/issues/1597

Вот примерный график.

library(plotly)

plot_ly(x = c('Product A', 'Product B', 'Product C'), 
        y = c(20, 14, 23), 
        type = 'bar', 
        marker = list(color = 'rgb(158,202,225)',
                           line = list(color = 'rgb(8,48,107)', width = 1.5))) %>%
  add_annotations(text = c(20, 14, 23),
                  x = c('Product A', 'Product B', 'Product C'),
                  y = c(20, 14, 23)/2,
                  xref = "x",
                  yref = "y",
                  font = list(family = 'Arial',
                              size = 14,
                              color = 'rgb(245, 246, 249)'),
                  showarrow = FALSE)

Sample Plot

1 Ответ

0 голосов
/ 12 февраля 2020

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

Сюжет:

enter image description here

Код

library(plotly)
library(dplyr)

p <- plot_ly(x = c('Product A', 'Product B', 'Product C'), 
        y = c(20, 14, 23), 
        type = 'bar', 
        marker = list(color = 'rgb(158,202,225)',
                           line = list(color = 'rgb(8,48,107)', width = 1.5))) %>%
  add_annotations(text = c('<b>20</b>', '<b>14</b>', '<b>23</b>'),
                  x = c('Product A', 'Product B', 'Product C'),
                  y = c(20, 14, 23)/2,
                  xref = "x",
                  yref = "y",
                  align='left',
                  font = list(family = 'Times New Roman',
                              size = 24,
                              color = 'black'),

                  showarrow = FALSE) %>%

  add_annotations(text = c('20 ', '14 ', '23 '),
                  x = c('Product A', 'Product B', 'Product C'),
                  y = c(20, 14, 23)/2,
                  xref = "x",
                  yref = "y",
                  #align="right",
                  font = list(family = 'Times New Roman',
                              size = 24,
                              color = 'white'),
                  #bgcolor="black",
                  showarrow = FALSE)


p

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

Второй лучший подход (или даже лучший) может состоять в том, чтобы просто включить bgcolor="black" в add_annotations() для получить это:

Сюжет:

enter image description here

Код:

library(plotly)
library(dplyr)

p <- plot_ly(x = c('Product A', 'Product B', 'Product C'), 
        y = c(20, 14, 23), 
        type = 'bar', 
        marker = list(color = 'rgb(158,202,225)',
                           line = list(color = 'rgb(8,48,107)', width = 1.5))) %>%
  add_annotations(text = c(20, 14, 23),
                  x = c('Product A', 'Product B', 'Product C'),
                  y = c(20, 14, 23)/2,
                  xref = "x",
                  yref = "y",
                  font = list(family = 'Arial',
                              size = 14,
                              color = 'rgb(245, 246, 249)'),
                  bgcolor="black",
                  showarrow = FALSE)


p
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...