I have a SQL Database with Dates in one row and values in the other
0 2019-09-30 12:03:35 363
1 2019-09-30 12:03:35 362
2 2019-09-30 12:03:35 363
3 2019-09-30 12:03:35 363
4 2019-09-30 12:03:35 363
I want to create a graph with >1000 values. My Code works as i want it, but the labeling on the x-axis is overloaded. I searched for a solution and it should work somehow with "ticks", but I cant make it fit my specific Datetime from my database. The x-axis Labels are crowded and not readable. I want to Label only in specific periods.
I tried several tutorials and documentation about the "ticks" but they dont handle given Datestrings like i have in my Database already.
import sqlite3 as lite
import pandas as pd
import matplotlib as matplt
import matplotlib.pyplot as plt
from fpdf import FPDF
import numpy as np
from matplotlib.ticker import (MultipleLocator, FormatStrFormatter, AutoMinorLocator)
datei = lite.connect("C://Users/Loos/Desktop/datenbankVersuch01.db")
conn = datei.cursor()
befehl = conn.execute('''SELECT * FROM sensorNeu''')
ausgeben = befehl.fetchall()
dataframeeins = pd.DataFrame(ausgeben)
print(dataframeeins.head(5))
print(dataframeeins.tail(5))
# info = dataframeeins[1].describe()
# print(dataframeeins.describe())
anzahlWerte = 400
periode = 400000
i = 0 # Zähler für die Werte
k = 0 # Nummerierung der Zwischenwerte
dates = []
values = []
zwischenspeicherSekunden = 0
zwischenspeicherWert = 0
for x in range(0, anzahlWerte):
# values.append(dataframeeins[1][(i * 4) + periode])
# dates.append(dataframeeins[0][(i * 4) + periode])
aktuelleZeit = dataframeeins[0][i + periode]
letzteZeichen = aktuelleZeit[17:19]
umwandeln = int(letzteZeichen)
zweiteZeit = dataframeeins[0][i + periode + 1]
letzteZeichenNeu = zweiteZeit[17:19]
umwandelnNeu = int(letzteZeichenNeu)
if k == 0:
#zwischenspeicherSekunden = umwandeln
zwischenspeicherSekunden = dataframeeins[0][i + periode]
# print(zwischenspeicherSekunden)
zwischenspeicherWert = dataframeeins[1][i+periode]
# print(zwischenspeicherWert)
k += 1
elif k != 0 and umwandeln == umwandelnNeu:
zwischenspeicherWert = (zwischenspeicherWert+dataframeeins[1][i+periode])/2
k += 1
elif k != 0 and umwandeln != umwandelnNeu:
# Wie groß ist der Abstand zwischen "umwandeln" und "umwandelnNeu"? eine oder mehrere sekunden
values.append(zwischenspeicherWert)
dates.append(zwischenspeicherSekunden)
k = 0
else:
print("FEHLER 0001: Keine Bedinung erfüllt!!!")
i += 1
aktuelleZeiten = dataframeeins[0][500000]
letzteZeichenn = aktuelleZeiten[17:19]
umwandeln = int(letzteZeichenn)
if umwandeln == 41:
print("Das letzte Zeichen ist 41")
#print(letzteZeichenn)
#print(dates[0])
#print(dates[1])
#print(dates[2])
#print(dates[3])
f, ax = plt.subplots()
# ax.set_xticks(np.arange(0))
# ax.xaxis.set_major_formatter(FormatStrFormatter('%s'))
plt.title("Der erste Versuch")
plt.suptitle("Prototyp01")
plt.plot(dates, values, marker='o', linestyle='--') # add linestyle=' ' or marker='o' or color='red'
plt.xlabel("Verlauf in Sekunden")
plt.ylabel("Sensorwert in mV/g")
plt.grid(True)
plt.show()
datei.commit()
datei.close()
How can I Label the x-Axis like just Label every 2,5 or 10 seconds and not every second?