目录
当我第一次看见pyecharts,就发现它是一个非常厉害的绘图工具,相比较于matplotlib,它不仅仅是动态的,更有很多的绘图种类,例如饼图、折线图、箱型图、地图、词云图等等。大家可以去官网先去预览,点击进入官网
在这里找到示例,可以看到有很多的图形。同时也能看到pyecharts的强大。
在学习的时候完全可在官网上面学习,上面有很代码。
那么废话少说,开始安装pyecharts。
一、安装pyecharts
1. 安装pyecharts
pyecharts有很多的版本,有新版本1.××和旧版本0.5×之分,并且这两个版本不兼容,而且旧版本不维护了,但是现在csdn上面很多都是旧版本的pyecharts。
可以看下这是新旧版本引入同一个库的写法。
#from pyecharts import Bar #旧版本的写法
from pyecharts.charts import Bar #新版本的写法
我个人建议使用新版本,以下就是新版本下载方式,
pip install pyecharts==0.1.9.4
2. 生成方式
当安装完pyecharts才完成了一小半,pyecharts的生成图像的方式有两种,生成html文件和直接生成图。
(1)生成html文件
# 绘制直方图
from pyecharts.charts import Bar
y1 = [1,4,5,8,15,6]
y2 = [2,9,6,5,1,4]
bar = Bar()
bar.add_xaxis(['1','2','3','4','5','6'])
bar.add_yaxis('1',y1)
bar.add_yaxis('2',y2)
bar.render('实例1.html') # 一定要加html后缀名,不然点不进浏览器
结果生成了一个html文件实例1.html,打开该文件,就会得到该图片。
(2) 直接生成图片
pyecharts输出一般都是html文件,当直接生成图片(静态图片),就需要安装渲染包snapshot_selenium:把html文件转换成png文件格式。
pip install snapshot-selenium
当然只是安装snapshot_selenium是不够的,还需要安装浏览器驱动器Chromedriver.exe,也就是我上一期安装的,大家可以返回看看。上一期安装Chromedriver.exe
安装完后一定要把Chromedriver.exe 的位置放在运行的文件在同一个包下,例如,
# 绘制直方图
from pyecharts.charts import Bar
from snapshot_selenium import snapshot
from pyecharts.render import make_snapshot
y1 = [1,4,5,8,15,6]
y2 = [2,9,6,5,1,4]
bar = Bar()
bar.add_xaxis(['1','2','3','4','5','6'])
bar.add_yaxis('1',y1)
bar.add_yaxis('2',y2)
make_snapshot(snapshot, bar.render(), r"C:\Users\86178\Desktop\实例1.png")
二、实际操作
1. 生成工作地图
要想生成地图,还需要下载以下关于地图信息的库。
pip install echarts-countries-pypkg 全球国家地图
pip install echarts-china-provinces-pypkg 中国省份地图
pip install echarts-china-cities-pypkg 中国城市地图
pip install echarts-china-counties-pypkg
pip install echarts-china-misc-pypkg
pip install echarts-united-kingdom-pypkg
大家还需要有一个关于全国的城市列表,比如说在爬取全国招聘信息时,它给出的地址信息是某个省的城市,而要统计全国各省的招聘信息就需要将城市转换到所在的省市。
(大家在评论区私信我,留下QQ邮箱,我会及时发给大家)。格式就像以下这样。
直接就给出代码了,主要就是将城市转换为所在的省市,然后绘制地图就是导入一个列表,列表中的元素是(城市,工作份数)
其实完全自己不用写代码,直接引用官网上面的代码。自己仅仅就是做好数据集就行了。
# 将部分地区的名字换成它对应的省份
fo =open('中国城市.txt','r')
fd = fo.readlines()
dict_city = {}
for i in fd:
line = i.strip().split(' ')
dict_city[line[0]] = dict_city.get(line[0],[]) + [line[1]]
dict_local_new = {}
for i in dict_city.items():
for j in list_local:
if j[0] in i[1]:
dict_local_new[i[0]] = dict_local_new.get(i[0],0) + j[1]
list_local_new = list(dict_local_new.items())
# 配色
pieces=[
{'max':1,'color':'#FFFFF0'},
{'min':1,'max':9,'color':'#FFE0E0'},
{'min':10,'max':99,'color':'#FEC0C0'},
{'min':100,'max':499,'color':'#FD9090'},
{'min':500,'max':999,'color':'#FC6060'},
{'min':1000,'max':9999,'color':'#FB3030'},
{'min':10000,'color':'#DD0000'}]
def use_pyecharts(city_string,true_city,data_info):
provience_city = (
Map(init_opts=opts.InitOpts(width="1000px", height="900px", page_title=city_string))
.add(
city_string,
data_info,
maptype=true_city, # 切换至其它地方
)
.set_global_opts(
title_opts=opts.TitleOpts(title='{}'.format(city_string),
title_target="blank", # 新窗口打开
subtitle='{}'.format(city_string), # 副标题
subtitle_target="self"), # 当前窗口打开
visualmap_opts=opts.VisualMapOpts(is_show=True, # 视觉映射配置
max_=200,
is_calculable=True, # 是否显示拖拽用的手柄
is_piecewise=True, # 是否为分段型
range_text=["High", "Low"],
border_color="#000",
pieces=pieces), # 两端文本
tooltip_opts=opts.TooltipOpts(trigger="item", # 触发类型
trigger_on="mousemove|click", # 提示框的触发条件
formatter="{b}:{c}份工作") # 标签内容格式,这里采用的字符串模板
)
.set_series_opts(
label_opts=opts.LabelOpts(is_show=True)
)
.render('provience_{}.html'.format(city_string))
)
use_pyecharts('全国python工作分布图','china',list_local_new)
2. 生成全国python平均薪资分布图
# 处理薪水,单位为千每月
def change_sal(string,old_sal,num_m):
sal = old_sal.replace(string, '')
min, max = sal.split('-')
min , max = eval(min),eval(max)
min *= num_m # 改变单位
max *= num_m
new_sal = (min+max)/2 # 计算平均薪水
return new_sal
dict_loc_sal = {} # 地点对应的薪水
for i in range(len(data_job['薪水'])):
sal = str(data_job['薪水'][i])
if '万/月' in sal:
sal = change_sal('万/月', sal, 10)
elif '元/天' in sal:
o_sal = sal.replace('元/天', '')
sal = eval(o_sal) * (30 / 1000)
elif '万/年' in sal:
sal = change_sal('万/年', sal, 10 / 12)
elif '千/月' in sal:
sal = change_sal('千/月', sal, 1)
else:
sal = None
city = data_job['公司地点'][i]
if '-' in city:
ls_city = city.strip().split('-')
city = ls_city[0]
else:
city = city
for c in dict_city.items():
if city in c[1]:
city = c[0]
if sal !=None:
dict_loc_sal[city] = dict_loc_sal.get(city,[]) + [sal]
else:
continue
for loc_sal in dict_loc_sal.items(): # 计算所有平均值
avg_sal = sum(loc_sal[1])/len(loc_sal[1])
dict_loc_sal[loc_sal[0]] = avg_sal
# 配色
pieces=[
{'max':1,'color':'#FFFFF0'},
{'min':2,'max':5.999999,'color':'#FFE0E0'},
{'min':6,'max':8.999999,'color':'#FEC0C0'},
{'min':9,'max':12.999999,'color':'#FD9090'},
{'min':12,'max':15.999999,'color':'#FC6060'},
{'min':16,'max':20.999999,'color':'#FB3030'},
{'min':21,'color':'#DD0000'}]
list_loc_sal = list(dict_loc_sal.items())
use_pyecharts('全国python平均薪水','china',list_loc_sal)
三、总结
用pyecharts绘图时,可以借助官网上面的代码,上面的图也很多。要是自己全部将其掌握还是有一定难度的。另外一些简单的图用matplotlib也是可以的。