我正在努力让Chartit使用我的Django项目。我发现它不支持x轴上的日期时间(它返回一个错误,并说“不是JSON可序列化的”。)因此,为了解决这个问题,我试图在使用lambda函数的this hack中工作。 (我也修改了那里指定的chartit python代码。)
这一行给出了错误,“TypeError:需要浮点数。”
x_sortf_mapf_mts=(None, lambda i: datetime.fromtimestamp(i).strftime("%H:%M"), False))
以下是该功能的相关部分:
cht = Chart(
datasource = happydata,
series_options =
[{'options':{
'type': 'line',
'stacking': False},
'terms':{
'day': [
'rating',]
}}],
chart_options =
{'title': {
'text': 'Ratings'},
'xAxis': {
'title': {
'text': 'Time'}}},
x_sortf_mapf_mts=(None, lambda i: datetime.fromtimestamp(i).strftime("%H:%M"), False))
我读了lambda函数,但我不确定为什么我会收到这个错误。任何帮助非常感谢!感谢。
跟踪,按要求:
Traceback:
File "C:\Python27\lib\site-packages\django\core\handlers\base.py" in get_response
111. response = wrapped_callback(request, *callback_args, **callback_kwargs)
File "C:\Users\MYSTUFF\projects\feels2\feelsapp\views.py" in home
82. x_sortf_mapf_mts=(None, lambda i: datetime.fromtimestamp(i).strftime("%H:%M"), False))
File "C:\Python27\lib\site-packages\chartit\charts.py" in __init__
25. self.generate_plot()
File "C:\Python27\lib\site-packages\chartit\charts.py" in generate_plot
200. data = [(x_mapf(x), y) for (x, y) in data]
File "C:\Users\MYSTUFF\projects\feels2\feelsapp\views.py" in <lambda>
82. x_sortf_mapf_mts=(None, lambda i: datetime.fromtimestamp(i).strftime("%H:%M"), False))
Exception Type: TypeError at /
Exception Value: a float is required
views.py
def home(request):
#Create a DataPool with the data we want to retrieve.
feels = Feel.objects.all()
happydata = \
DataPool(
series=
[{'options': {
'source': Feel.objects.all()},
'terms': [
'day',
'rating']}
])
cht = Chart(
datasource = happydata,
series_options =
[{'options':{
'type': 'line',
'stacking': False},
'terms':{
'day': [
'rating',]
}}],
chart_options =
{'title': {
'text': 'Your Ratings'},
'xAxis': {
'title': {
'text': 'Time'}}},
x_sortf_mapf_mts=(None, lambda i: datetime.fromtimestamp(float(i)).strftime("%H:%M"), False))
return render_to_response('happy.html',{'happychart': cht})
答案 0 :(得分:2)
@wwii是正确的,如果它的lambda给你错误,你可能传入一个字符串。应该可以使用任何int或float,尝试:
lambda i: datetime.fromtimestamp(float(i)).strftime("%H:%M")
编辑:看到您对@wwii的评论,看起来您可能没有传递实数。您应该尝试在代码中的某处添加print语句,并在创建该图表之前检查“i”的值。