Используйте Matplotlib для цветных точек на основе значения [duplicate]

На всякий случай, кто-то посещает этот вопрос в 2017 году или позже и ищет легкий для запоминания способ, вот подробное сообщение в блоге по Доступ к вложенным объектам в JavaScript без бамбука с помощью

Невозможно прочитать свойство «foo» неопределенной ошибки

1. Схема доступа вложенных объектов Oliver Steele

Самый простой и самый чистый способ - использовать шаблон доступа к вложенным объектам Oliver Steele

const name = ((user || {}).personalInfo || {}).name;

. В этих обозначениях вы никогда не столкнетесь с

Невозможно прочитать свойство 'name' неопределенного .

Вы в основном проверяете, существует ли пользователь, если нет, вы создаете пустой объект «на лету». Таким образом, ключ следующего уровня будет всегда доступен из объекта, который существует, или пустого объекта, но никогда из неопределенного.

2. Доступ к вложенным объектам с использованием массива Уменьшить

Чтобы иметь доступ к вложенным массивам, вы можете написать собственный массив, уменьшающий использование.

const getNestedObject = (nestedObj, pathArr) => {
    return pathArr.reduce((obj, key) =>
        (obj && obj[key] !== 'undefined') ? obj[key] : undefined, nestedObj);
}

// pass in your object structure as array elements
const name = getNestedObject(user, ['personalInfo', 'name']);

// to access nested array, just pass in array index as an element the path array.
const city = getNestedObject(user, ['personalInfo', 'addresses', 0, 'city']);
// this will return the city from the first address item.

Существует также отличная библиотека обработки минимального типа typy , который делает все это для вас.

43
задан Eric Leschinski 19 March 2016 в 20:35
поделиться

2 ответа

Это то, что matplotlib.pyplot.scatter для.

В качестве быстрого примера:

import matplotlib.pyplot as plt
import numpy as np

# Generate data...
t = np.linspace(0, 2 * np.pi, 20)
x = np.sin(t)
y = np.cos(t)

plt.scatter(t,x,c=y)
plt.show()

enter image description here [/g0]

65
ответ дан Joe Kington 27 August 2018 в 20:50
поделиться

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

def plot(xx, yy, good):
    """Plot data

    Good parts are plotted as black, bad parts as red.

    Parameters
    ----------
    xx, yy : 1D arrays
        Data to plot.
    good : `numpy.ndarray`, boolean
        Boolean array indicating if point is good.
    """
    import numpy as np
    import matplotlib.pyplot as plt
    fig, ax = plt.subplots()
    from matplotlib.colors import from_levels_and_colors
    from matplotlib.collections import LineCollection
    cmap, norm = from_levels_and_colors([0.0, 0.5, 1.5], ['red', 'black'])
    points = np.array([xx, yy]).T.reshape(-1, 1, 2)
    segments = np.concatenate([points[:-1], points[1:]], axis=1)
    lines = LineCollection(segments, cmap=cmap, norm=norm)
    lines.set_array(good.astype(int))
    ax.add_collection(lines)
    plt.show()
1
ответ дан Paul Price 27 August 2018 в 20:50
поделиться
Другие вопросы по тегам:

Похожие вопросы: