pygal优雅地添加数据

最初源码:

import pygal

view = pygal.Bar(print_values=True)
# 图表名
view.title = '粉丝时间段变化'
# 添加数据
view.x_title = '时间点(1指00:00-01:00)'
view.x_labels =  [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24]
view.add('粉丝增长变化', [7, 7, 6, 1, -2, 2, 1, -2, 10, 7, 1, -45, -12, -8, -11, 11, -5, 14, 4, 18, 121, 68, 36, -1])
view.render_to_file('fs.svg')

运行结果:
粉丝变化柱状图

遇到的问题

pygal文档里添加数据大多都是直接用数字添加,遇到大量数据或者像上面每日需要更改的数据就很麻烦

解决方法

继续查看pygal文档发现连续的数字数据可以用map(str,range(x,y))代替,于是将代码变成了

view.x_labels = map(str,range(1,25))

但是粉丝增长变化每天都不同,该如何优雅地将其可视化呢?粉丝增长变化原本是爬虫爬出来的列表,问题变成怎么将列表里的int用map传进去,笨方法是像下面这样不用map一个一个传

cy=[7, 7, 6, 1, -2, 2, 1, -2, 10, 7, 1, -45, -12, -8, -11, 11, -5, 14, 4, 18, 121, 68, 36, -1]
view.add('增长变化', [
	cy[0], cy[1], cy[2], cy[3], cy[4], cy[5], cy[6], cy[7], cy[8], cy[9],
	cy[10], cy[11], cy[12], cy[13], cy[14], cy[15], cy[16], cy[17], cy[18],
	cy[19], cy[20], cy[21], cy[22], cy[23]
])

可这也太繁杂了,比之前直接添加数字还要麻烦,于是参考上面map的用法,将range换成列表试试

view.add('粉丝增长变化', map(int,cy))

然后你就会发现生成的svg图变成了大大的No data
No data

最终方案

试着打印map结果发现打印的是<map object at 0x000002400040A130>,查阅资料后发现要在map前加个list才能打印出结果,于是代码变成了

import pygal

cy=[7, 7, 6, 1, -2, 2, 1, -2, 10, 7, 1, -45, -12, -8, -11, 11, -5, 14, 4, 18, 121, 68, 36, -1]
view = pygal.Bar(print_values=True)
# 图表名
view.title = '粉丝时间段变化'
# 添加数据
view.x_title = '时间点(1指00:00-01:00)'
view.x_labels =  map(str,range(1,25))
view.add('粉丝增长变化', list(map(int, cy)))
view.render_to_file('fs.svg')

运行后的svg图也和一开始的一模一样
粉丝变化柱状图大功告成😎
优雅,实在是太优雅了

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值