虽然有很多种方法都可以画图,但是用bokeh画出来的图确实在颜色协调上会更好看。这几天在做爬虫,需要爬取亚马逊的畅销书籍的信息,在最后打算将这些信息进行画柱形图分析的时候,却出现了问题。
我是先将爬取到的数据转成Dataframe格式,类似下面这样
由于在提取dataframe格式数据的某一列的时候,得到的结果类型是serice类型,因此要先将这种类型转换成列表list形式:
x1 = data['Author'].tolist()
top1 = data['Price'].tolist()
其中画图最重要的两行代码如下:
p = figure(x_range=x1, plot_width=800, plot_height=550, title="Authors Highest Priced Book", toolbar_location=None, tools="")
p.vbar(x=x1, top=top1, width=0.2)
但是我在这里卡了很久很久!
它就是!
不显示图像!
最重要的三个参数分别是x_range, x, top
经过我重重筛查,
- 调用的包是正确的,只是看你是不是在notebook环境下运行而已,问题不大;
- 那三个参数类型也都是list,没错;
- 我又找了别人是怎么画这个柱形图的,将这些数据包装成ColumnDataSource形式,但是这其实一般代码都会默认给你转换成这种形式,因此这个也没有解决问题;
- 然后我又在想会不会是因为我需要x轴的标识是字符,所以就有点儿问题,于是我用简易的[‘a’, ‘b’, ‘c’]来进行测试,它居然画出来了!!(然后我进入了更沉默的深思)
- 由于我原来的数据只有15组,所以只能用最笨的办法来查了,我直接用数据来初始化那些参数,发现确实还是不能画出来,但这时我留意到了,那些作者的名字千奇百怪(毕竟是外文,多多少少有点儿特别),我就揣测是不是字符编码的问题,于是将那些特别的字符都去掉了,但!它还是没有画出来;
6)最终我选择,一个一个添加数据来进行测试,前面几个添加完了,是可以正常画出图的,但是当再添加某一个作者名字的时候,突然就画不出来了,我终于发现了问题!因为畅销书排行榜中,可能一个作者不止一本书上榜,因此横坐标就得出现两次这个作者的名字,但是这个时候,图像就不能正常显示了!
总结:特殊字符不影响显示图像,重要的是,横坐标的字符不能够有重复!
也就是[‘a’, ‘b’, ‘c’]是可以的,但是[‘a’, ‘a’, ‘c’]就会直接不显示任何东西。