Eine Option ist in der Tat (wie Sie selbst in den Kommentaren sagten), einen nicht numerischen Index zu verwenden.
import pandas as pd
import matplotlib.pyplot as plt
hour = range(8, 24) + range(0, 8)
values = pd.Series(range(24), index=list(map(str,hour)))
ax = values.plot()
plt.show()
Da dies automatisch einige Etiketten wählen werden und es gibt keine Möglichkeit, sie zu kontrollieren, ist es vielleicht nicht optimal sein.
Eine bessere Lösung ist wahrscheinlich einen anderen Index zu verwenden, und zwar eine, die numerische und kontinuierlich zunehmende (in diesem Fall 8 bis 31), und dann ändern, um die ticklabels als modulo von 24.
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import matplotlib.ticker
hour = range(8, 24) + range(0, 8)
values = pd.Series(range(24), index=hour)
values.index = values.index[0]+np.arange(0,len(values))
ax = values.plot()
func = lambda x,pos: "{:g}".format(x%24)
ax.xaxis.set_major_formatter(matplotlib.ticker.FuncFormatter(func))
plt.show()
Dies würde dann auch die Standorte auf Vielfache von einer bestimmten Anzahl (EG6), die an einem Tag stundenlang Sinn einstellen lassen macht.
ax.xaxis.set_major_locator(matplotlib.ticker.MultipleLocator(6))
Schließlich konnte man natürlich entscheiden sich für echte Datetimes mit.
import pandas as pd
import matplotlib.pyplot as plt
from datetime import datetime
hour = range(8, 24) + range(0, 8)
values = pd.Series(range(24), index=hour)
todate = lambda i: datetime(2017,11,8+(values.index[0]+i)//24,(values.index[0]+i)%24)
values.index = [todate(i) for i in range(len(values))]
ax = values.plot()
plt.show()
Das Grundstück rearange nichts. Außerdem wird der Index nicht ignoriert. stattdessen * verwendet * den Index. Was meinst du mit "den" rohen "Stundenwerten"? Wie soll die Handlung aussehen? – ImportanceOfBeingErnest
Ich möchte die X-Achse von 8 bis 7 (von 23 auf 0 springen) gehen. Als ob die Etiketten nicht numerisch wären. – user3121900