title: Matplotlib bar graph x axis won't plot string values
body: <p>I am using Python 2.7 and matplotlib. I am attempting to reach into my database of ambulance calls and count up the number of calls that happen on each weekday.</p>
  <p>I will then use matplotlib to create a bar chart of this information to give the paramedics a visual graphic of how busy they are on each day.</p>
  <p>Here is the code that works well:</p>
  <pre><code>import pyodbc
  import matplotlib.pyplot as plt
  MySQLQuery = &quot;&quot;&quot;
  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)
  &quot;&quot;&quot;
  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()
  </code></pre>
  <p>The code shown above works very well. It returns a nice looking graph and I am happy. I just want to make one change.</p>
  <p>Instead of the X axis showing the names of the days of the week, such as &quot;Sunday&quot;, it shows the integer. In other words, Sunday is 1, Monday is 2, etc.</p>
  <p>My fix for this is that I rewrite my sql query to use <code>DATENAME()</code> instead of <code>DATEPART()</code>.
  Shown below is my sql code to return the name of the week (as opposed to an integer).</p>
  <pre><code>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)
  </code></pre>
  <p>Everything else in my python code stays the same. However this will not work and I cannot understand the error messages.</p>
  <p>Here are the error messages:</p>
  <pre><code>Traceback (most recent call last):
    File &quot;C:\Documents and Settings\kulpandm\workspace\FiscalYearEndReport\CallVolumeByDayOfWeek.py&quot;, line 59, in 
  
  &lt;module&gt;
      plt.bar(DayOfWeekOfCall, DispatchesOnThisWeekday)
    File &quot;C:\Python27\lib\site-packages\matplotlib\pyplot.py&quot;, line 2080, in bar
      ret = ax.bar(left, height, width, bottom, **kwargs)
    File &quot;C:\Python27\lib\site-packages\matplotlib\axes.py&quot;, line 4740, in bar
      self.add_patch(r)
    File &quot;C:\Python27\lib\site-packages\matplotlib\axes.py&quot;, line 1471, in add_patch
      self._update_patch_limits(p)
    File &quot;C:\Python27\lib\site-packages\matplotlib\axes.py&quot;, line 1489, in _update_patch_limits
      xys = patch.get_patch_transform().transform(vertices)
    File &quot;C:\Python27\lib\site-packages\matplotlib\patches.py&quot;, line 547, in get_patch_transform
      self._update_patch_transform()
    File &quot;C:\Python27\lib\site-packages\matplotlib\patches.py&quot;, line 543, in _update_patch_transform
      bbox = transforms.Bbox.from_bounds(x, y, width, height)
    File &quot;C:\Python27\lib\site-packages\matplotlib\transforms.py&quot;, 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
  </code></pre>
  <p>To sum up, when I output my data with the x axis as integers representing days of week and y axis showing a count of the number of ambulance incidents, Matplotlib will produce a nice graph. But when my data output is the x axis is a string (Sunday, Monday, etc). then Matplotlib will not work.</p>
  <p>How to fix this?</p>