Matplotlib bar graph die x-Achse nicht plot-string-Werte

Mein name ist David und ich arbeite für einen Krankenwagen-service in Florida.

Ich bin mit Python 2.7 und matplotlib. Ich bin versucht zu erreichen, in meine Datenbank Krankenwagen ruft und zählen Sie die Anzahl der Anrufe, die passieren, an jedem Wochentag.

Werde ich dann verwenden matplotlib erstellen Sie ein Balkendiagramm, in der diese Informationen zu geben, die Sanitäter eine visuelle Grafik, wie beschäftigt Sie sind, an jedem Tag.

HIER IST CODE, DER FUNKTIONIERT SEHR GUT:

import pyodbc
import matplotlib.pyplot as plt
MySQLQuery = """
SELECT 
 DATEPART(WEEKDAY, IIU_tDispatch)AS [DayOfWeekOfCall]
COUNT(DATEPART(WeekDay, IIU_tDispatch)) AS [DispatchesOnThisWeekday]
FROM AmbulanceIncidents
GROUP BY DATEPART(WEEKDAY, IIU_tDispatch)
ORDER BY DATEPART(WEEKDAY, IIU_tDispatch)
"""
cnxn = pyodbc.connect('DRIVER={SQL Server};SERVER=MyServer;DATABASE=MyDatabase;UID=MyUserID;PWD=MyPassword')
cursor = cnxn.cursor()
GraphCursor = cnxn.cursor()
cursor.execute(MySQLQuery)

#generate a graph to display the data
data = GraphCursor.fetchall()
DayOfWeekOfCall, DispatchesOnThisWeekday = zip(*data)
plt.bar(DayOfWeekOfCall, DispatchesOnThisWeekday)
plt.grid()
plt.title('Dispatches by Day of Week')
plt.xlabel('Day of Week')
plt.ylabel('Number of Dispatches')
plt.show()

Den code oben funktioniert sehr gut. Es gibt eine schön anzuschauende Grafik und ich bin glücklich. Ich möchte nur eine änderung vornehmen.

Statt die X-Achse zeigt die Namen der Tage der Woche, wie "Sonntag", es zeigt die ganze Zahl. In anderen Worten, der Sonntag ist 1, Montag ist 2 usw..

Meine Lösung für dieses Problem ist, dass ich umschreiben, meine sql-Abfrage ein, mit der Funktion Datename() anstelle von DATEPART().
Unten ist mein sql-code, um den Namen der Woche (im Gegensatz zu Ganzzahl).

SELECT 
 DATENAME(WEEKDAY, IIU_tDispatch)AS [DayOfWeekOfCall]
, COUNT(DATENAME(WeekDay, IIU_tDispatch)) AS [DispatchesOnThisWeekday]
FROM AmbulanceIncidents
GROUP BY DATENAME(WEEKDAY, IIU_tDispatch)
ORDER BY DATENAME(WEEKDAY, IIU_tDispatch)

Alles andere in meinem python-code bleibt der gleiche. Allerdings funktioniert das nicht und ich kann nicht verstehen, die Fehlermeldungen.

Hier sind die Fehlermeldungen:

Traceback (most recent call last):
  File "C:\Documents and Settings\kulpandm\workspace\FiscalYearEndReport\CallVolumeByDayOfWeek.py", line 59, in 

<module>
    plt.bar(DayOfWeekOfCall, DispatchesOnThisWeekday)
  File "C:\Python27\lib\site-packages\matplotlib\pyplot.py", line 2080, in bar
    ret = ax.bar(left, height, width, bottom, **kwargs)
  File "C:\Python27\lib\site-packages\matplotlib\axes.py", line 4740, in bar
    self.add_patch(r)
  File "C:\Python27\lib\site-packages\matplotlib\axes.py", line 1471, in add_patch
    self._update_patch_limits(p)
  File "C:\Python27\lib\site-packages\matplotlib\axes.py", line 1489, in _update_patch_limits
    xys = patch.get_patch_transform().transform(vertices)
  File "C:\Python27\lib\site-packages\matplotlib\patches.py", line 547, in get_patch_transform
    self._update_patch_transform()
  File "C:\Python27\lib\site-packages\matplotlib\patches.py", line 543, in _update_patch_transform
    bbox = transforms.Bbox.from_bounds(x, y, width, height)
  File "C:\Python27\lib\site-packages\matplotlib\transforms.py", line 745, in from_bounds
    return Bbox.from_extents(x0, y0, x0 + width, y0 + height)
TypeError: coercing to Unicode: need string or buffer, float found

Kann ich nicht herausfinden.

Zusammenfassend ist zu sagen, wenn ich die Ausgabe meiner Daten, die mit der x-Achse als Ganzzahlen, die Tage der Woche und die y-Achse zeigt die Anzahl von Krankenwagen Vorfälle, Matplotlib erzeugt eine schöne Grafik. Aber wenn meine Daten Ausgabe der x-Achse ist ein string (Sonntag, Montag usw.). dann Matplotlib wird nicht funktionieren.

Ich habe mehrere Stunden der Forschung bei Google und dem Lesen der matplotlib-Dokumentation.
Bitte helfen Sie mir mit diesem. Ich bin der Hoffnung, zu nutzen, Matplotlib, wie meine reports engine.

InformationsquelleAutor David Kulpanowski | 2012-02-01

Schreibe einen Kommentar