为什么这个散景散点图没有显示任何东西?
Why doesn't this bokeh scatter graph show anything?
我正在尝试使用 python 制作一个散点图,它显示了每年的联赛排名和 rookie/veteran 球队信息。
我希望有积分列,每年一列,每个位置一分,点的颜色取决于他们是新秀还是老将。
我有这段代码,但它似乎没有显示任何数据。为什么?
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)
我觉得这不是使用散点图的好方法,但我不知道还能怎么做。
您发布的代码包含只有一个 x 值的示例数据。如果您更改示例数据,以便只有一个点代表不同的年份(我将第一个点的年份更改为 2014 年),那么数据图表可以使用与您发布的代码完全相同的代码(只要您创建保存位置)。
您的 get_data() 函数似乎也只返回一年的数据,这将导致同样的问题。
如果你想要的图表实际上只是一个垂直的点列,那么也许你可以有第三个使用不同年份的虚拟系列,然后隐藏图例条目并将查看 window 设置为排除虚拟数据。
我猜你想要比这更好的东西。如果您提供一个您希望图表实际看起来像什么的模型,也许使用 excel 或其他东西,您会得到更好的答案。
我正在尝试使用 python 制作一个散点图,它显示了每年的联赛排名和 rookie/veteran 球队信息。 我希望有积分列,每年一列,每个位置一分,点的颜色取决于他们是新秀还是老将。
我有这段代码,但它似乎没有显示任何数据。为什么?
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)
我觉得这不是使用散点图的好方法,但我不知道还能怎么做。
您发布的代码包含只有一个 x 值的示例数据。如果您更改示例数据,以便只有一个点代表不同的年份(我将第一个点的年份更改为 2014 年),那么数据图表可以使用与您发布的代码完全相同的代码(只要您创建保存位置)。
您的 get_data() 函数似乎也只返回一年的数据,这将导致同样的问题。
如果你想要的图表实际上只是一个垂直的点列,那么也许你可以有第三个使用不同年份的虚拟系列,然后隐藏图例条目并将查看 window 设置为排除虚拟数据。
我猜你想要比这更好的东西。如果您提供一个您希望图表实际看起来像什么的模型,也许使用 excel 或其他东西,您会得到更好的答案。