Как получить как Hlines, так и Vlines в визуализации

#python #pandas #numpy #matplotlib #data-visualization

#python #панды #numpy #matplotlib #визуализация данных

Вопрос:

одна из строк появляется в визуализации

 %matplotlib

import numpy as np
import matplotlib as mpl
import matplotlib.dates as mdates
import matplotlib.pyplot as plt
import pandas as pd
def grid_sncf_generation_mitry():
    plt.figure(figsize=(50,100))


    # general var
    hcoord = np.arange(0,1,23)


    # Adding the time zone

    # J'ai restreint la plage horaire

    v2=np.datetime64('2019-09-13T03:30')
    v1=np.datetime64('2019-09-13T05:40')

    # Adding Stations V5 / V3 / SAS5 / SAS3

    plt.hlines("GA",v1,v2,"grey","dotted")
    plt.hlines("SAS3",v1,v2,"grey","dotted")
    plt.hlines("SAS5",v1,v2,"grey","dotted")
    plt.hlines("V3",v1,v2,"grey","dotted")
    plt.hlines("V5",v1,v2,"grey","dotted")

    #plt.vlines(hcoord,0,4)

    # id station
    plt.ylabel("MITRY")

    # Time axis
    # Adding Hours
    myFmt = mdates.DateFormatter('%H')
    plt.gca().xaxis.set_major_formatter(myFmt)
    plt.gca().xaxis.set_major_locator(mdates.HourLocator())

    # Adding Minutes
    myFmt2 = mdates.DateFormatter('%M')
    plt.gca().xaxis.set_minor_formatter(myFmt2)
    plt.gca().xaxis.set_minor_locator(mdates.MinuteLocator([10, 20, 30, 40, 50]))


    # Minimisize the police of minutes
    for tick in plt.gca().xaxis.get_minor_ticks():
        tick.label.set_fontsize(6)

    # comment détecter les heurs ?



    # comment détecter les 30's ?

    plt.show()
    return plt 
  

Я хочу получить как hlines, так и vlines в визуализации

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

1. В вашем коде нет никаких раскомментированных вызовов plt.vlines . В частности, что идет не так, когда вы пытаетесь это сделать?

2. что идет не так, так это то, что когда я удаляю # из plt.vlines(hcoord,0,4), я получаю только вертикальную линию, а горизонтальные идут.

Ответ №1:

Ваша проблема возникает из-за смешивания единиц datetime и значений, отличных от datetime.

Когда вы запускаете свой код во время раскомментирования plt.vlines(hcoord,0,4) , вы должны получить исключение:

 fig = plt.figure()
hcoord = np.arange(0,1,23)
v2=np.datetime64('2019-09-13T03:30')
v1=np.datetime64('2019-09-13T05:40')

# Adding Stations V5 / V3 / SAS5 / SAS3

plt.hlines("GA",v1,v2,"grey","dotted")
plt.hlines("SAS3",v1,v2,"grey","dotted")
plt.hlines("SAS5",v1,v2,"grey","dotted")
plt.hlines("V3",v1,v2,"grey","dotted")
plt.hlines("V5",v1,v2,"grey","dotted")

plt.vlines(hcoord,0,4)
plt.show()
  

Ошибка значения: минимальный предел просмотра -36865.76180555556 меньше 1 и
является недопустимым значением даты Matplotlib. Это часто происходит, если вы передаете
значение, отличное от datetime, оси с единицами datetime

При замене hcoord значением datetime работает так, как ожидалось:

 fig = plt.figure()
hcoord = np.arange(0,1,23)
v2=np.datetime64('2019-09-13T03:30')
v1=np.datetime64('2019-09-13T05:40')

# Adding Stations V5 / V3 / SAS5 / SAS3

plt.hlines("GA",v1,v2,"grey","dotted")
plt.hlines("SAS3",v1,v2,"grey","dotted")
plt.hlines("SAS5",v1,v2,"grey","dotted")
plt.hlines("V3",v1,v2,"grey","dotted")
plt.hlines("V5",v1,v2,"grey","dotted")

plt.vlines(v2,0,4)
plt.show()
  

введите описание изображения здесь

К сожалению, я не понимаю, с чем вы пытаетесь построить график hccord = np.arange(0,1,23) , поскольку эта инструкция возвращает [0] . Вам нужно будет выяснить, как сгенерировать правильный hcoord массив в единицах даты и времени, чтобы получить ожидаемый график.

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

1. Дизиет, ты мужик! ty: D Вы исправили то, что я хотел сделать. я не знал, что hcoord принимает в качестве значений.

2. Если ваша проблема решена, подумайте о том, чтобы принять ее, нажав на флажок слева, чтобы закрыть тему