我叫大卫,我在佛罗里达的一家救护车公司工作。
我正在使用Python 2.7和matplotlib。我正试图进入我的救护车呼叫数据库,并统计每个工作日发生的呼叫次数。
然后,我将使用matplotlib创建此信息的条形图,以向医护人员显示他们每天的忙碌程度。
下面是非常有效的代码:
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()
上面显示的代码工作得很好。它返回一个漂亮的图表,我很高兴。我只想做一个改变。
它显示的是整数,而不是显示一周中日期的名称的X轴,例如“Sunday”。换句话说,星期天是1,星期一是2,等等
我的修正是,我改写我的SQL查询使用DeNeNeMe()代替DATEPARTE()。 下面显示的是我的sql代码,用于返回周的名称(而不是整数)。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)
我的python代码中的其他内容保持不变。但是这不起作用,我无法理解错误消息。
以下是错误消息:
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
我想不通。
综上所述,当我用x轴作为整数输出数据时,y轴显示救护车事故的数量,Matplotlib将生成一个很好的图表。但当我的数据输出是x轴时,它是一个字符串(星期日、星期一等)。那么Matplotlib将不工作。
我在Google上做了几个小时的研究,阅读了matplotlib文档。 请帮帮我。我希望使用Matplotlib作为我的报告引擎。
不要仅仅为了改变说明而更改SQL代码。相反,在Python代码中添加一些内容。
我相信你可以做些类似this answer的事情。将刻度标签设置为一周中的几天。
它可以简单地添加以下行:
Documentation: pyplot.xticks
EDIT:使用虚构的表
IncidentTypes
对注释进行响应的示例,该表将整数键映射到事件类型的名称。您的问题与SQL查询无关,它只是一种结束的方法。你真正要问的是如何在pylab中更改条形图上的文本标签。bar chart的文档对于定制非常有用,但是这里有一个最小的工作示例(MWE):
解决问题的最终完整答案: 非常感谢史蒂夫。你帮了大忙。我在大学学的是地理,不是编程,所以这对我来说很难。 这是我的最终代码。
我真的不明白“results=cursor.fetchall()”和下面四行涉及创建数组的代码之间的关系。我很高兴你这样做,因为我看着它,它仍然没有下沉。 非常感谢你。这帮了大忙。 大卫
相关问题 更多 >
编程相关推荐