
uj5u.com熱心網友回復:
在這行代碼中: line_chart.x_labels = x_unique你的 x_unique 是整形元組
把整形元組轉化為String型串列
再賦值給 line_chart.x_labels 就沒問題了~
uj5u.com熱心網友回復:
是因為你在前面把month和close轉化為int,提示int has no len,如果前面不轉化就沒有問題了uj5u.com熱心網友回復:
我也是初學者,下面是我的解決代碼,定義了兩個函式,一個取資料,一個畫圖,樓主出現的錯誤,主要是因為畫圖中橫坐標必須是字串。解決方案如下#coding=gbk
import pygal
import math
import json
from itertools import groupby
def get_data(filename,dates,months,weeks,weekdays,close):
with open(filename) as f:
btc_data=https://bbs.csdn.net/topics/json.load(f)
for btc_dict in btc_data:
dates.append(btc_dict['date'])
months.append(int(btc_dict['month']))
weeks.append(int(btc_dict['week']))
weekdays.append(btc_dict['weekday'])
close.append(int(float(btc_dict['close'])))
def draw_line(x_data,y_data,title,y_legend):
xy_map=[]
for x,y in groupby(sorted(zip(x_data,y_data)),key=lambda _: _[0]):
y_list=[v for _,v in y]
xy_map.append([x,sum(y_list)/len(y_list)])
x_unique,y_mean=[*zip(*xy_map)]
line_chart=pygal.Line()
line_chart.title=title
'''#注意,橫坐標必須是字串,使用數字會引發TypeError:TypeError: object of type
# 'int' has no len()的例外'''
new_x_unique=[]
for x in x_unique:
new_x_unique.append(str(x))
print(new_x_unique)
line_chart.x_labels=new_x_unique
line_chart.add(y_legend,y_mean)
line_chart.render_to_file(title+'.svg')
return line_chart
dates,months,weeks,weekdays,close=[],[],[],[],[]
get_data('btc_close_2017.json',dates,months,weeks,weekdays,close)
idx_month=dates.index('2017-12-01')
line_chart_month=draw_line(months[:idx_month],close[:idx_month],'收盤價月日均價','月日均價')
line_chart_month
uj5u.com熱心網友回復:

這是我的運行結果圖
uj5u.com熱心網友回復:
感謝,這個問題找了兩天了,終于解決了
uj5u.com熱心網友回復:
感謝樓主以及各位,糾纏了半個下午,終于解決了
uj5u.com熱心網友回復:
非常感謝!!!我把所有函式都一個一個排查,都沒發現問題。原來是型別的問題。uj5u.com熱心網友回復:
原本以為這樣寬泛的錯誤在網上搜不到答案,結果一搜就搜到了,謝謝各位大神uj5u.com熱心網友回復:
原來有這么多小伙伴用這個書,能找到一模一樣的問題,非常有幫助,非常感謝!
uj5u.com熱心網友回復:
按照上面二樓老哥方法改了一下原始碼line_chart.x_labels = x_unique
->line_chart.x_labels = [str(_) for _ in x_unique]
這樣編譯就不會再出現型別錯誤了
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/127576.html
標籤:其他開發語言
上一篇:matlab彩色影像融合 求程式
下一篇:匯編語言
