Защо тази графика на разсейване на боке не показва нищо?

Опитвам се да направя точкова графика с помощта на python, която показва позиции в лигата и информация за отбора на новобранец/ветерана за година по година. Искам да има колони с точки, с една колона на година и една точка на позиция, където цветът на точката зависи от това дали е новобранец или ветеран.

Имам този код, но изглежда не показва никакви данни. Защо?

from bokeh.charts import Scatter, show, output_file
from bokeh.models import Range1d
#from vdata.data import get_schools
from collections import OrderedDict

def get_data(years):
    schools = get_schools(['raw_data/2015-teams.yaml'], [2015])

    d = OrderedDict()
    d['rookie'] = []
    d['veteran'] = []

    for s in schools:
        for year in years:
            rookie = s.data[year]['rookie']
            league_position = s.data[year]['league']

            if rookie:
                d['rookie'].append((year, league_position))
            else:
                d['veteran'].append((year, league_position))
    return d

data = OrderedDict([('rookie', [(2015, 14), (2015, 26), (2015, 47), (2015, 41), (2015, 24), (2015, 45), (2015, 35), (2015, 46), (2015, 21), (2015, 47), (2015, 5), (2015, 31), (2015, 28), (2015, 30), (2015, 18)]), ('veteran', [(2015, 13), (2015, 27), (2015, 42), (2015, 18), (2015, 39), (2015, 34), (2015, 22), (2015, 2), (2015, 3), (2015, 43), (2015, 8), (2015, 40), (2015, 1), (2015, 29), (2015, 4), (2015, 18), (2015, 44), (2015, 7), (2015, 23), (2015, 16), (2015, 32), (2015, 6), (2015, 37), (2015, 25), (2015, 11), (2015, 38), (2015, 17), (2015, 12), (2015, 15)])])

def league_rookie(d):
    scatter = Scatter(d, title='League positions and rookie values', legend=True, ylabel='League Position', xlabel='Year', width=1000, height=600, y_range=Range1d(60, 0))
    output_file('visuals/html/league_rookie.html')
    show(scatter)

if __name__ == '__main__':
    #data = get_data([2015])
    league_rookie(data)

Чувствам, че това не е чудесен начин за използване на диаграма на разсейване, но не знам как иначе да го направя.


person blueteeth    schedule 31.08.2015    source източник


Отговори (1)


Кодът, който публикувахте, има примерни данни само с една x стойност. Ако промените примерните си данни, така че само една точка да е за различна година (промених годината на първата точка да бъде 2014), тогава данните се изобразяват добре, като се използва кодът точно както сте го публикували (стига да създадете записа местоположение).

Изглежда също, че вашата функция get_data() връща данни само за една година, което ще причини същия проблем.

Ако желаната от вас графика всъщност е само една вертикална колона от точки, тогава може би можете да имате трета фиктивна серия, която използва различна година и след това просто да скриете записа в легендата и да настроите прозореца за преглед, за да изключи фиктивните данни.

Предполагам, че искате нещо по-хубаво от това. Ако предоставите макет на това как искате действително да изглежда графиката, може би с помощта на Excel или нещо подобно, ще получите много по-добри отговори.

person WantsomeChocolate    schedule 02.09.2015
comment
Бяхте прав. Желаната ми графика беше една вертикална колона от точки (поне за първата година). - person blueteeth; 22.09.2015