Как я могу настроить цветовую панель в плотно Scattergeo? - PullRequest
1 голос
/ 07 марта 2020

enter image description here Я взял некоторые данные о пожарах с сайта земных данных НАСА (пожары в Южной Америке) и нанес данные на карту мира. Я использовал цветную полосу для отображения яркости каждого огня.

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

import csv

from plotly.graph_objs import Scattergeo, Layout
from plotly import offline

filename = 'data/MODIS_C6_South_America_24h.csv'
with open(filename) as f:
    reader = csv.reader(f)
    header_row = next(reader)
    print(header_row)

    # Get latitudes, longitudes and brightness from this file.

    lats, lons, brights = [], [], []
    for row in reader:
        lat = float(row[0])
        lats.append(lat)
        lon = float(row[1])
        lons.append(lon)
        bright = float(row[2])
        brights.append(bright)

# Map the fires
data = [{
    'type': 'scattergeo',
    'lon': lons,
    'lat': lats,
    'marker': {
        'size': [1/30* bright for bright in brights],
        'color': brights,
        'colorscale': 'Inferno',
        'reversescale': True,
        'colorbar': {'title': 'Brightness'},
    },
}]
my_layout = Layout(title='South America Fires\npast 24 hours')

fig = {'data': data, 'layout': my_layout}
offline.plot(fig, filename='south_america_fires.html')

Можно ли как-то изменить пределы цветовой шкалы, чтобы маркеры имели более широкий цветовой диапазон и были лучше различимы? Или есть лучшая стратегия?

1 Ответ

1 голос
/ 12 марта 2020

Разница в яркости огней не соответствует полному диапазону цветовой шкалы

Да, они соответствуют. Просто взгляните на более простую визуализацию ваших данных:

Участок 1: Участок распределения Seaborn

enter image description here

Код 1: Участок распределения Seaborn

import seaborn as sns
import numpy as np
sns.set(color_codes=True)
sns.distplot(tuple(brights))

Ваш участок выглядит так, как он выглядит по трем причинам:

  1. Есть много наблюдений вокруг brightness = 330
  2. очень мало наблюдений за более яркими пожарами
  3. И наиболее важно, маркеры добавляются к графику в том порядке, в котором они появляются в вашем наборе данных.

Так что, если вы просто отсортируете данные, чтобы убедиться, что более яркие огни не охвачены менее яркими огнями, вы получите это:

* Сюжет 2: Сортировка brights с использованием brights.sort()

enter image description here

Я думаю, что следует позаботиться об этом:

[...], чтобы маркеры имели более широкий цветовой диапазон и были лучше различимы?

* 10 62 * Так что на самом деле не нужно беспокоиться об этом:

Можно ли как-то изменить пределы шкалы цветов [...]

Вы могли бы рассмотрите также запись в журнал ваших данных. Я проверял это, но это не имело особого визуального различия. И обратите внимание, что я удалил часть 'size': [1/60* bright for bright in brights]. Я думаю, что график 2 выглядел лучше, чем этот:

enter image description here

Полный код:

import csv

from plotly.graph_objs import Scattergeo, Layout
from plotly import offline

filename = 'C:\\pySO\\MODIS_C6_South_America_24h.csv'
with open(filename) as f:
    reader = csv.reader(f)
    header_row = next(reader)
    print(header_row)

# Get latitudes, longitudes and brightness from this file.

    lats, lons, brights = [], [], []
    for row in reader:
        lat = float(row[0])
        lats.append(lat)
        lon = float(row[1])
        lons.append(lon)
        bright = float(row[2])
        brights.append(bright)

brights.sort()

# Map the fires
data = [{
    'type': 'scattergeo',
    'lon': lons,
    'lat': lats,
    'marker': {
        #'size': [1/60* bright for bright in brights],
        'color': brights,
        #'color': brights.sort(),
        'colorscale': 'Inferno',
        'reversescale': True,
        'colorbar': {'title': 'Brightness'},
    },
}]
my_layout = Layout(title='South America Fires\npast 24 hours')

fig = {'data': data, 'layout': my_layout}
offline.plot(fig, filename='south_america_fires.html')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...