плотно закрасить прозрачность цвета в R блестящий - PullRequest
1 голос
/ 04 мая 2020

В Р и сюжетно. Как я могу попытаться использовать альфа, чтобы контролировать прозрачность сгруппированного графика рассеяния. Я следовал примеру в Цвет заливки Plotly по умолчанию - полупрозрачность, хочу отсутствие прозрачности :

df <- data.frame(x = rep(LETTERS[1:5], 3), 
                 y = rexp(15, rate = 0.5),
                 z = c(rep("Adam", 5), rep("Arthur", 5), rep("Ford", 5)))
df <- arrange(df, desc(z))
plot_ly(df, x = ~x, y = ~y, color = ~z, type = 'scatter', stackgroup = 'one',
        groupnorm = 'percent', colors =  gg_color(Nv), alpha = 1, alpha_stroke = 1)

Но цвета заливки прозрачны, и alpha, похоже, ничего не делает. enter image description here

Решение, указанное в Цвет заливки Plotly по умолчанию имеет полупрозрачность, требуется отсутствие прозрачности работает:

library(htmlwidgets)
library(htmltools)
fillOpacity = function(., alpha = 0.5) {
  css = sprintf("<style> .js-fill { fill-opacity: %s !important; } </style>", alpha)
  prependContent(., HTML(css))
}
plot_ly(df, x = ~x, y = ~y, color = ~z, type = 'scatter', stackgroup = 'one',
        groupnorm = 'percent', colors =  gg_color(Nv), alpha = 1, alpha_stroke = 1) %>%
fillOpacity(alpha = 1)

Работает:

enter image description here

Однако в Shiny это выдает следующее предупреждение и непрозрачность теряется

Warning in renderWidget(instance) :
  Ignoring prepended content; prependContent can't be used in a Shiny render call

Есть ли способ исправить this?

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

1 Ответ

0 голосов
/ 05 мая 2020

Я посмотрел здесь https://plotly.com/python/filled-area-plots/ и использовал fill='tonexty'. Теперь alpha = 1 работает и контролирует прозрачность заливки.

ply = plot_ly(df, x = ~x, y = ~y, color = ~z, type = 'scatter', stackgroup = 'one',
        groupnorm = 'percent', alpha = 1, alpha_stroke = 1, mode = 'marker', opacity=1, fill='tonexty');ply

дает:

enter image description here

Я все еще думаю, что это недосмотр в API. когда stackgroup = 'one', groupnorm = 'percent' заполнение автоматически fill='tonexty'. не должно быть необходимости добавлять его, чтобы манипулировать непрозрачностью. Кроме того, alpha = 1 становится активным только потому, что были добавлены работы fill='tonexty', сбивает с толку.

...