Matplotlib y los valores del eje no están ordenados

Estoy tratando de trazar utilizando matplotlib. La gráfica mostró un problema de que el eje Y no está ordenado.

Aquí está el código.

# -*- coding: UTF-8 -*- import matplotlib.pyplot as plt import matplotlib.dates as mdates import datetime import numpy as np I020 = [ line.strip('\n').split(",") for line in open(r'D:\Users\a0476\Anaconda3\TickData\PV5sdata1.csv')][1:] Time = [ datetime.datetime.strptime(line[0],"%H%M%S%f") for line in I020 ] Time1 = [ mdates.date2num(line) for line in Time ] Solar = [ line[1] for line in I020 ] order = np.argsort(Time1) xs = np.array(Time1)[order] ys = np.array(Solar)[order] plt.title('Solar data') plt.xlabel('Time') plt.ylabel('Solar') ax.plot_date(xs, ys, 'k-') hfmt = mdates.DateFormatter('%H:%M:%S') ax.xaxis.set_major_formatter(hfmt) plt.show() 

Los datos CSV

 time solar 7000000 50.35 8000000 41.01 9000000 69.16 10000000 94.5 11000000 111.9 12000000 103 13000000 98.6 14000000 36.45 15000000 34.74 16000000 34.17 17000000 34.6 

introduzca la descripción de la imagen aquí

La razón por la que esto sucede es porque sus datos se trazan como cadenas .

La solución es convertir tus datos del eje y a flotadores. Esto se puede hacer simplemente lanzando a un flotador en la comprensión de la lista:

 Solar = [float(line[1]) for line in I020] 

También sugeriría usar el formato automático de matplotlib del eje x al usar fechas / horas. Esto rotará las tags, etc. para hacer que el gráfico se vea mejor:

 plt.gcf().autofmt_xdate() 

Tu ejemplo se convierte en:

 I020 = [ line.strip('\n').split(",") for line in open('PV5sdata1.csv')][1:] Time = [datetime.datetime.strptime(line[0],"%H%M%S%f") for line in I020] Time1 = [mdates.date2num(line) for line in Time] Solar = [float(line[1]) for line in I020] xs = np.array(Time1) # You don't really need to do this but I've left it in ys = np.array(Solar) fig, ax = plt.subplots() # using matplotlib's Object Oriented API ax.set_title('Solar data') ax.set_xlabel('Time') ax.set_ylabel('Solar') ax.plot_date(xs, ys, 'k-') hfmt = mdates.DateFormatter('%H:%M:%S') ax.xaxis.set_major_formatter(hfmt) plt.gcf().autofmt_xdate() plt.show() 

Lo que da:

introduzca la descripción de la imagen aquí