В дополнение к ссылке, которую дает Джонатан Леффлер в своем ответе, также могут оказаться полезными для вас [) соглашения Agner Fog .
Не изменяйте свой код SQL, чтобы изменить рисунок. Вместо этого сделайте небольшое дополнение к вашему коду Python.
Я считаю, что вы можете сделать что-то вроде этого ответа . Установите метки тика на дни недели.
Это может быть так же просто, как добавить следующую строку:
plt.xticks((1, 2, ..., 7), ('Sunday', 'Monday', ..., 'Saturday'))
EDIT: Пример в ответ на комментарий с использованием вымышленной таблицы IncidentTypes
, которая отображает целочисленные ключи в имена типов инцидентов.
cursor.execute('select incident_type_id, count(*), incident_type
from Incidents join IncidentTypes using (incident_type_id)
group by incident_type_id')
results = cursor.fetchall()
tickpositions = [int(r[0]) for r in results]
numincidents = [int(r[1]) for r in results]
ticklabels = [r[2] for r in results]
plt.bar(tickpositions, numincidents)
plt.xticks(tickpositions, ticklabels)
Окончательный ответ, который разрешил проблему: Большое спасибо Стиву. Вы очень помогли. Я изучал географию в колледже, а не программировал, так что это довольно сложно для меня. Вот последний код, который работает для меня.
import pyodbc
import matplotlib.pyplot as plt
MySQLQuery = """
SELECT
DATEPART(WEEKDAY, IIU_tDispatch)AS [IntegerOfDayOfWeek]
, COUNT(DATENAME(WeekDay, IIU_tDispatch)) AS [DispatchesOnThisWeekday]
, DATENAME(WEEKDAY, IIU_tDispatch)AS [DayOfWeekOfCall]
FROM IIncidentUnitSummary
INNER JOIN PUnit ON IIU_kUnit = PUN_Unit_PK
WHERE PUN_UnitAgency = 'LC'
AND IIU_tDispatch BETWEEN 'October 1, 2010' AND 'October 1, 2011'
AND PUN_UnitID LIKE 'M__'
GROUP BY DATEPART(WEEKDAY, IIU_tDispatch), DATENAME(WEEKDAY, IIU_tDispatch)
ORDER BY DATEPART(WEEKDAY, IIU_tDispatch)
"""
cnxn = pyodbc.connect("a bunch of stuff I don't want to share")
cursor = cnxn.cursor()
GraphCursor = cnxn.cursor()
cursor.execute(MySQLQuery)
results = cursor.fetchall()
IntegerDayOfWeek, DispatchesOnThisWeekday, DayOfWeekOfCall = zip(*results)
tickpositions = [int(r[0]) for r in results]
numincidents = [int(r[1]) for r in results]
ticklabels = [r[2] for r in results]
plt.bar(tickpositions, numincidents)
plt.xticks(tickpositions, ticklabels)
#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()
cursor.close()
cnxn.close()
Я действительно не понимаю строки между «results = cursor.fetchall ()» и следующие четыре строки кода, которые включают создание массивов. Я рад, что вы это сделали, потому что я смотрю на него, и он все еще не погружается. Большое вам спасибо. Это очень помогает. Дэвид
Ваш вопрос не имеет ничего общего с SQL-запросом, это просто средство для завершения. То, что вы действительно задаете, - это изменить текстовые метки на гистограмме в pylab. Документы для гистограммы полезны для настройки, но просто изменение меток здесь является минимальным рабочим примером (MWE):
import pylab as plt
DayOfWeekOfCall = [1,2,3]
DispatchesOnThisWeekday = [77, 32, 42]
LABELS = ["Monday", "Tuesday", "Wednesday"]
plt.bar(DayOfWeekOfCall, DispatchesOnThisWeekday, align='center')
plt.xticks(DayOfWeekOfCall, LABELS)
plt.show()
[/g2]