Частотная гистограмма / бар-диаграмма в Python из двух списков [дубликат]

В дополнение к ссылке, которую дает Джонатан Леффлер в своем ответе, также могут оказаться полезными для вас [) соглашения Agner Fog

.

30
задан N West 30 April 2012 в 21:48
поделиться

3 ответа

Не изменяйте свой код SQL, чтобы изменить рисунок. Вместо этого сделайте небольшое дополнение к вашему коду Python.

Я считаю, что вы можете сделать что-то вроде этого ответа . Установите метки тика на дни недели.

Это может быть так же просто, как добавить следующую строку:

plt.xticks((1, 2, ..., 7), ('Sunday', 'Monday', ..., 'Saturday'))

Документация: pyplot.xticks

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)
6
ответ дан Community 27 August 2018 в 03:52
поделиться

Окончательный ответ, который разрешил проблему: Большое спасибо Стиву. Вы очень помогли. Я изучал географию в колледже, а не программировал, так что это довольно сложно для меня. Вот последний код, который работает для меня.

 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 ()» и следующие четыре строки кода, которые включают создание массивов. Я рад, что вы это сделали, потому что я смотрю на него, и он все еще не погружается. Большое вам спасибо. Это очень помогает. Дэвид

1
ответ дан David Kulpanowski 27 August 2018 в 03:52
поделиться

Ваш вопрос не имеет ничего общего с 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()

enter image description here [/g2]

68
ответ дан Hooked 27 August 2018 в 03:52
поделиться
Другие вопросы по тегам:

Похожие вопросы: