Matplotlib не прокладывает линию между точками данных - PullRequest
0 голосов
/ 09 октября 2019

У меня есть набор данных накопления снегопада, которые я строю из CSV, который выглядит так: CSV Exeample

Я пытаюсь построить данные GFS против данных RAPи RAP будет безупречно строить точки и линии, которые их соединяют. Однако СГФ будет отображать только точечные данные: GFS vs. RAP current graphic, и я, на всю жизнь, не нашел способа нанести на график данные СГФ с помощью линии, соединяющей эти точки. Вот код, с которым я работаю:

gfs = df['GFS']
rap = df['RAP']
fig2, ax2 = plt.subplots(figsize=(10,8))
ax2.plot(fh,gfs,'ob-') 
ax2.plot(fh,rap,marker='x')
ax2.tick_params(which='major',labelsize='12')
ax2.grid(which='major', color='#CCCCCC', linestyle='-')
plt.xticks(rotation='90')
plt.xlabel('Forecast Run')
plt.ylabel('Snowfall Accumulation (in.)')
plt.legend()

Буду признателен за любую помощь и руководство!

Отредактированный график с ~ np.isnan (): Edited Graph

1 Ответ

1 голос
/ 09 октября 2019

Чтобы развернуть ответ @ ImportanceOfBeingErnest, можно удалить пропущенные значения, например:

Заменить

ax2.plot(fh,gfs,'ob-') 

на

ax2.plot(fh[~np.isnan(gfs)],gfs[~np.isnan(gfs)],'ob-') 

ОБНОВЛЕНИЕ:

Приведенный выше метод, вероятно, приводит к изменению порядка оси x. Вот обходной путь:

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt

# make up some fake data
df = pd.DataFrame({"GFS": [np.nan, np.nan, 1, 2, np.nan, 
                          2, 3, np.nan, np.nan, 4], 
                    "RAP": [-2.45832646,  0.56266567, -0.4453474 , 
                            -0.85447845, -1.34830127,
                            -0.38113925, -0.41400397,  
                            np.nan, -0.78764545, -0.02807674]})
fh = np.array(["Fri 4 am", "Fri 6 am","Fri 8 am","Fri 10 am",
                "Fri 6 pm","Fri 10 pm","Sat 4 am","Sat 6 am",
                "Sat 8 am","100az 10 am"
                ])
gfs = df['GFS']
rap = df['RAP']


fig2, ax2 = plt.subplots(figsize=(10,8))
# workaround to set the order of xlabels
ax2.plot(fh, [np.nan]*len(fh)) 
# remove nan's  so that the points are connected
ax2.plot(fh[~np.isnan(gfs)], gfs[~np.isnan(gfs)], "ob-") 
ax2.plot(fh[~np.isnan(rap)],rap[~np.isnan(rap)],marker='x')
ax2.tick_params(which='major',labelsize='12')
ax2.grid(which='major', color='#CCCCCC', linestyle='-')
plt.xticks(rotation='90')
plt.xlabel('Forecast Run')
plt.ylabel('Snowfall Accumulation (in.)')

enter image description here

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