Изменение цветовой схемы в хороплет-карте Python - PullRequest
2 голосов
/ 24 сентября 2019

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

Цвета должны быть назначены следующим образом:

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

Как настроить код для отображения нужной цветовой схемы?

Код:

import plotly.graph_objects as go

fig_2 = go.Figure(data=go.Choropleth(
    locations = df['ISO'],
    z = df['Ratio'],
    text = df['Country'],
    colorscale = 'RdYlGn',
    autocolorscale=False,
    reversescale=False,
    marker_line_color='darkgray',
    marker_line_width=0.5,
    colorbar_title = 'Ratio',
))

fig_2.update_layout(
    title_text='Ratios in 2100',
    geo=dict(
        showframe=True,
        showcoastlines=False,
        projection_type='equirectangular'
    )
)

fig_2.show()

enter image description here

1 Ответ

0 голосов
/ 24 сентября 2019

Вы можете ускорить свою собственную цветовую шкалу в go.Figure(), используя:

colorscale=[[0, "rgb(255,0,0)"],
            [limit, "rgb(255,255,51)"],
            [1, "rgb(0,204,0)"]]

Вы не можете указать интервал напрямую, как вам бы того хотелось, поскольку шкалы основаны на процентилях базовой серии.Но вы можете сопоставить ваш limit=1 с вашими данными, используя scipy.stats.percentileofscore, и разделить ваш набор данных на основании этого.Ниже приведен график с воспроизводимым кодом, основанный на примере в plot.ly / python / choropleth-maps .Я выбрал серию от 0 до 3 вместо ваших соотношений, используя np.random.uniform, и добавил ее к данным, представленным в хороплетовой ссылке.Сюжет подготовлен в Jupyterlab.

Участок:

enter image description here

Код:

from plotly import graph_objs as go
import numpy as np
import os
from plotly.subplots import make_subplots
import pandas as pd
import scipy

# Load data frame and tidy it.
import pandas as pd

np.random.seed(123)

df = pd.read_csv('https://raw.githubusercontent.com/plotly/datasets/master/2011_us_ag_exports.csv')
dfx = pd.DataFrame(np.random.uniform(-2,2,size=(50, 1)), columns=['RND'])
dfc = pd.concat([df,dfx], axis = 1)

limit = scipy.stats.percentileofscore(dfc['RND'], 1)
high = dfc['RND'].max()
low = dfc['RND'].min()
limit = limit/100

fig = go.Figure(data=go.Choropleth(
    locations=dfc['code'], # Spatial coordinates
    z = dfc['RND'].astype(float), # Data to be color-coded
    locationmode = 'USA-states', # set of locations match entries in `locations`
     colorscale=[[0, "rgb(255,0,0)"],
                [limit, "rgb(255,255,51)"],
                [1, "rgb(0,204,0)"]],
    colorbar_title = "Millions USD",
))

fig.update_layout(
    title_text = '2011 US Agriculture Exports by State',
    geo_scope='usa', # limite map scope to USA
)

fig.show()

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

Полезные ресурсы:

...