Как я могу изменить цветовую шкалу для colorbar с R-Plotly? - PullRequest
0 голосов
/ 22 апреля 2019

Я пытаюсь создать сюжетную диаграмму рассеяния с цветом в качестве третьего измерения.Я могу изменить свою цветовую шкалу так, как мне нравится, но я не смог изменить свою цветовую полосу, чтобы она соответствовала цветовой шкале точек диаграммы рассеяния (цветовая полоса остается «Viridis», даже когда я указываю цветовую шкалу = «Горячая»).

library(plotly)

data = iris

p = plot_ly(data,
                x=~ Sepal.Length,
                y=~ Sepal.Width,
                type = 'scatter',
                mode = 'markers',
                marker = list(
                  size=10,
                  opacity=.9,
                  colorscale='Hot'),
                color=~Petal.Length)

colorbar(p)

Я ожидаю, что цветовая полоса будет соответствовать указанной цветовой шкале, но она останется 'Viridis'.

The colorbar should match the specified colorscale = 'Hot' but it still displays 'Viridis'

1 Ответ

1 голос
/ 23 апреля 2019

Я не эксперт по сюжету, поэтому я не уверен в основной проблеме, но я могу решить эту проблему, переместив определения color= и colorbar= в аргумент marker=:

plot_ly(data,
        x=~ Sepal.Length,
        y=~ Sepal.Width,
        type = 'scatter',
        mode = 'markers',
        marker = list(
            color=~Petal.Length,
            size=10,
            opacity=.9,
            colorscale='Hot',
            colorbar=list(
                title='Colorbar'
            )
        )
)

enter image description here

В качестве альтернативы, если вы определяете свою цветовую шкалу с аргументом colors=, вместо colorscale=, она будет работать как нужно. Недостатком является то, что вы должны использовать:

Либо имя палитры colorbrewer2.org (например, "YlOrRd" или "Blues"), либо вектор цветов для интерполяции в шестнадцатеричном формате "#RRGGBB", либо функция интерполяции цвета, такая как colorRamp ()

p = plot_ly(data,
            x=~ Sepal.Length,
            y=~ Sepal.Width,
            type = 'scatter',
            mode = 'markers',
            marker = list(
                size=10,
                opacity=.9),
            color=~Petal.Length,
            colors = 'Blues'
)

colorbar(p)

enter image description here

'Blues' - шкала цветоделения. Вы также можете использовать цветовые шкалы из пакета viridis (см. ?viridisLite::viridis), например:

# note that you need to provide an n= argument >= the number of colors needed
viridis::inferno(99)
...