Постройте непрерывные данные с помощью строк, используя python matplotlib

#python #list #matplotlib

#python #Список #matplotlib

Вопрос:

Мне нужно вывести данные с помощью matplotlib, которые представляют собой ряд, но в которых отсутствуют некоторые значения, поэтому они не совсем непрерывны. В настоящее время данные представлены в виде простых списков, с одним значением для каждого отображаемого значения «N», от 15 до 40, поэтому существует список этих значений, передаваемых как информация x команде построения графика. Данные передаются в виде списка для информации y и в настоящее время содержат либо количество numpy.nan, для мест, где нет данных для этого набора.

Что мне нужно сделать, так это отобразить их, как показано, за исключением того, что мне нужно, чтобы отсутствующие точки данных игнорировались, а линии соединялись между следующими точками данных, например, красный круг при x = 20 должен соединяться с красным кругом при x = 35, и два маркера наносятся одной и той же командой plot.

Пример графика

Этот код должен отображать различные наборы данных, где в некоторых из них не будет данных на уровне 15, но необходимо показать, что данных нет, т. Е. Оси остаются неизменными для наглядности, а ряды соединены, чтобы показывать тенденции.

пример данных для данных красного круга:

 [numpy.nan, 6.3, numpy.nan, numpy.nan, 8.4, numpy.nan]
  

пример данных для данных зеленого круга:

 [numpy.nan, 4.1, 4.3, numpy.nan, 5.8, nunmpy.nan]

fig = plt.figure(figsize=(16,9))
ax = fig.add_subplot(111)
ax.plot(plens, polyplot, linestyle='--', marker='^', markersize=7.0, color='red')
  

Я оставил в стороне лишнюю информацию, такую как индексация цветов и маркировка, поскольку они не важны для проблемы. Спасибо.

Ответ №1:

Что я бы сделал, так это удалил эти элементы из домена и отображаемые значения, вот так.

Я собираюсь использовать y для значений, которые, возможно, находятся в polyplot , и x для вашего домена, который, возможно, вызывается plens в скрипте.

 import numpy as np

x = np.array([15, 20, 25, 30, 35, 40]) # Gotten from the image
y = np.array([np.nan, 4.1, 4.3, np.nan, 5.8, np.nan]) # Red circle data
y_not_nan_inds = ~np.isnan(y)

ax.plot(x[y_not_nan_inds], y[y_not_nan_inds], ...)
  

Здесь мы преобразуем все в массивы numpy, находим местоположения, в которых есть y значения, и строим линии над этими областями.

Комментарии:

1. Это звучит многообещающе, и я забыл показать определение, plens — это просто список, [15, 20, 25, 30, 35, 40], итак, мой окончательный полиплот данных также представляет собой список из 6 значений, как вы и указали. Я попробую это сделать и посмотрю, сработает ли это.

2. Звучит неплохо. Просто вставил 15 в x , понял, что у меня там всего 5 значений.

3. У меня не работает, я получаю довольно странный график, все значения неверны, он переходит от 0 к 1, поэтому я думаю, что это построение таблицы истинности для ~ np.isnan. imgur.com/pEInB52

4. Ха — ты уверен, что ты строишь, y[y_not_nan_inds] а не просто y_not_nan_inds ?

5. Да, это то, что я сделал, понял после публикации, хах, извините.