Matplotlib не выводит определенные данные .. хотя разброс работает - PullRequest
0 голосов
/ 06 октября 2018

скажем

twenty = [[0.00186157 0.00201416 0.00216675 0.00213623 0.00253296 0.00250244  0.00280762 0.00292969 0.00308228 0.0032959  0.00338745 0.003479  0.003479   0.00341797 0.00335693 0.00320435 0.00308228 0.0027771  0.00253296 0.00216675]]
twentyfirst = [[0.00186157]]

Следующая функция - хотя она должна отображаться как для рассеяния, так и для линейного графика (это реализовано точно так же, как на странице ).оба в маркерах, но matplotlib теряется в генерирующих линиях.

def plot_time_series(twenty, twentyfirst):
    xlabel = np.arange(0, 1, 1./20).reshape(1,20)
    print(np.ones(twenty.shape[1])[np.newaxis,:].shape) #(1,20)
    A = np.vstack([xlabel, np.ones(twenty.shape[1])[np.newaxis,:]]).T

    m, c = np.linalg.lstsq(A, twenty.T)[0]
    print(m, c)
    plt.scatter(xlabel, twenty.T, c='b', label='data')
    ylabel = m*xlabel + c
    print(ylabel.shape) #(1,20)
    plt.plot(xlabel, ylabel, '-ok', label = 'fitted line')
    plt.legend(loc='best')
    plt.ylabel('amplitudes')
    plt.savefig('timeseries_problem2'+'_4')
    plt.close()

enter image description here

1 Ответ

0 голосов
/ 07 октября 2018

В этом вопросе задается вопрос о разнице между построением графиков

plt.plot([[1,2,3]],[[2,3,1]])

и

plt.plot([[1],[2],[3]],[[2],[3],[1]])

В обоих случаях списки являются двухмерными.В первом случае у вас есть один ряд данных.Во втором случае у вас есть один столбец данных.

Из документации :

x, y: массив или скаляр
[...]
Обычно эти параметры являются массивами длины N. Однако также поддерживаются скаляры (эквивалентные массиву с постоянным значением).

Параметры также могут быть 2-мерный .Затем столбцы представляют отдельные наборы данных .

Важной частью является последнее предложение.Если данные 2D, как здесь, они интерпретируются по столбцам.Поскольку массив строк [[2,3,1]] состоит из 3 столбцов, каждый из которых имеет одно значение.plot, следовательно, создаст 3 одиночные «линии» с одной точкой.Но поскольку одна точка не определяет линию, она будет видна только при активации маркера, например,

plt.plot([[1,2,3]], [[2,3,1]], marker="o")

enter image description here

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

plt.plot([[1],[2],[3]], [[2],[3],[1]])

enter image description here

Конечно, выравнивание массива до 1D одинаково возможно,

plt.plot(np.array([[1,2,3]]).flatten(), np.array([[2,3,1]]).flatten())

Вы можете легко проверить, сколько линий вы произвели

print(len(plt.plot([[1,2,3]],[[2,3,1]])))            # prints 3
print(len(plt.plot([[1],[2],[3]],[[2],[3],[1]])))    # prints 1
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...