0

私は同等のクエリを持っています

SELECT
     MONTH,
     TEAM,
     COUNT(*)
FROM
    TABLE

Matplotlib を使用した結果を、TEAM の異なる値に対して同じグラフに別々のプロットでプロットするつもりです。このフィールドの可能な値は事前にわかりません。

pyplot に送信するのに適しているように、カーソルから返されたリストを分割する最良の方法は何でしょうか?

4

1 に答える 1

0

リストを分割する方法は次のとおりです。それが「リストを分割する最良の方法」であるかどうかはわかりません。

def display(conn):
    cur = conn.cursor()
    cur.execute('select month, team, count(*) from events group by month, team')
    months = defaultdict(list)
    count = defaultdict(list)
    for row in cur:
        months[row[1]].append(int(row[0]))
        count[row[1]].append(int(row[2]))
    cur.close()
    for k in months:
        pylab.plot(months[k], count[k], label=k)
    pylab.legend()
    pylab.show()

完全なサンプル プログラム:

import sqlite3
import pylab
from collections import defaultdict

def populate_table(conn):
    with conn:
        conn.execute('create table events (month, team, value)')
        conn.executemany(
            'insert into events values (?,?,?)', (
                (1, 'Bluejays', 98.2),
                (1, 'Redbirds', 42),
                (1, 'Green Eggs and Ham', 1),
                (1, 'Bluejays', 98.2),
                (1, 'Redbirds', 42),
                (1, 'Bluejays', 98.2),
                (1, 'Green Eggs and Ham', 1),
                (2, 'Green Eggs and Ham', 98.2),
                (2, 'Redbirds', 42),
                (2, 'Green Eggs and Ham', 1),
                (2, 'Bluejays', 98.2),
                (2, 'Redbirds', 42),
                (2, 'Bluejays', 98.2),
                (2, 'Green Eggs and Ham', 1),
                (3, 'Green Eggs and Ham', 98.2),
                (3, 'Redbirds', 42),
                (3, 'Green Eggs and Ham', 1),
                (3, 'Bluejays', 98.2),
                (3, 'Redbirds', 42),
                (3, 'Redbirds', 98.2),
                (3, 'Green Eggs and Ham', 1)))

def display(conn):
    cur = conn.cursor()
    cur.execute('select month, team, count(*) from events group by month, team')
    months = defaultdict(list)
    count = defaultdict(list)
    for row in cur:
        months[row[1]].append(int(row[0]))
        count[row[1]].append(int(row[2]))
    cur.close()
    for k in months:
        pylab.plot(months[k], count[k], label=k)
    pylab.legend(loc="lower left")
    pylab.xlim(.5,3.5)
    pylab.xticks(range(1,4))
    pylab.ylim(.5,3.5)
    pylab.yticks(range(1,4))
    pylab.xlabel("Month")
    pylab.ylabel("Events")
    pylab.show()


conn = sqlite3.connect(':memory:')
populate_table(conn)
display(conn)

結果:

ここに画像の説明を入力

于 2013-10-05T00:05:47.027 に答える