私の名前はDavidです。私はフロリダの救急車サービスの仕事をしています。Matplotlibの棒グラフx軸は文字列の値をプロットしません
私は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()
:HERE
は非常によく動作するコードです。それは素晴らしいグラフを返し、私は満足しています。私はちょうど1つの変更をしたい。代わりに、このような「日曜日」として曜日の名前を示すX軸の
は、それは整数を示しています。言い換えれば、日曜日はこのため
私の修正は、私が代わりにDATEPARTの())DATENAMEを(使用するように私のSQLクエリを書き直すことであるなど、月曜日は2で、1です。 以下は、整数の代わりに週の名前を返す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
:
はここでエラーメッセージが表示されています。
要約すると、救急車のインシデント数を示すy軸と曜日を表す整数としてx軸のデータを出力すると、Matplotlibは素晴らしいグラフを生成します。しかし、私のデータ出力がx軸の場合は文字列(日曜日、月曜日など)です。 Matplotlibは機能しません。
Googleで数時間の研究を行い、matplotlibのドキュメントを読んでいます。 これを手伝ってください。 Matplotlibをレポートエンジンとして使用したいと考えています。
それは良い答えであるかもしれないようにこれが見えます。残念ながら、私が作成しなければならない次の棒グラフは、救急車が対応するインシデントの種類の数です。約60種類のインシデントがあります。 x軸の60種類の値をハードコードすることはできません。それはあまりにもエラーになりやすいです。 –
前の投稿から続行。 SPSSとSASは、公称値を使って棒グラフを簡単に作成します。私はこれがMatplotlibにとってとても難しいと信じています。私は行方不明の何かが簡単になければならない!しかし、それは何ですか? –
先頭へ戻る最初のコメント:整数を曜日または整数にインシデントタイプにマップするSQLテーブルを追加できます。例: 'create table IncidentTypes(pk int主キーauto_increment、Name varchar(20))'。その後、テーブルに参加してください。これは柔軟でモジュール式です。インシデントタイプは、キー(int)または名前(Python)で参照できます。 –