Matplotlib ничего не печатать, когда 'нань' со строками - PullRequest
0 голосов
/ 04 октября 2018

Я хочу создать прерывистый график, который ничего не печатает, когда переменная равна 'nan'.К сожалению, поскольку ось Y на этом графике отображает строковые значения, при появлении 'nan' график просто создает галочку 'Nan' на оси Y.

Например:

enter image description here

Мне бы хотелось, чтобы синий график ничего не отображал при появлении 'nan', вместо того, чтобы рассматривать nan как строку.

Заранее спасибо

ОБНОВЛЕНИЕ:

В качестве минимального примера давайте предположим, что я написал:

x = [0,1,2,3,4,5,6,7,8]
y = ['Stairs',np.nan, 'Sitting', np.nan, 'Stairs','Falling','Falling','Standing',np.nan]
plt.plot(x,y)

И это дает мне следующий результат:

enter image description here

Я бы хотел, чтобы нан не отображался на графике.Возможно ли это?

Ответы [ 3 ]

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

Чтобы ответить на ваш вопрос: если вы используете возможности категорического черчения в matplotlib (см. Пример галереи ), то невозможно создать прерывистый график.Этот код преобразует ваш Nan в строку, как вы заметили.Я бы, вероятно, использовал «Нет», чтобы указать недостающие значения, и нарисовал бы части в кусках, если бы я был вами:

x = [0,1,2,3,4,5,6,7,8]
y = ['Stairs', None, 'Sitting', None, 'Stairs', 'Falling', 'Falling', 'Standing', None]
curr_x = []
curr_y = []
for xval, yval in zip(x, y):
    if yval is None:
        if curr_x:
            ax.plot(curr_x, curr_y, "-bo")
            curr_x = []
            curr_y = []
    else:
        curr_x.append(xval)
        curr_y.append(yval)
ax.plot(curr_x, curr_y, "-bo")

enter image description here

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

Вы можете построить график с использованием целочисленных индексов, а затем соответствующим образом пометить галочки:

import matplotlib.pyplot as plt
import numpy as np

x = [0,1,2,3,4,5,6,7,8]
y = ['Stairs',np.nan, 'Sitting', np.nan, 'Stairs','Falling','Falling','Standing',np.nan]
y_ticks = ['Stairs', 'Sitting', 'Falling', 'Standing']
y_int = [np.nan if elem is np.nan else y_ticks.index(elem) for elem in y]
plt.plot(x, y_int, '.-')
plt.yticks(range(len(y_ticks)), y_ticks)
0 голосов
/ 04 октября 2018

Я бы сделал это как-то так:

y_List = ['sss', NaN, 'ddd', ....]
y_List_new = []
for i in y_List:
    if i != NaN:
        y_List_new.append(i)

, а затем просто построил y_List_new :) edit: конечно, я забыл, вам нужно сделать это и для первого списка (значения x), иначеу вас будет слишком много значений

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...