最近研究python作图,看了一些作图的第三方库,发现作不同的图用不同的第三方库的效果不同,例如,如果要作出如下带中国地图+条形图的样式,pyecharts这个库还是很不错的。虽然有个硬伤,就是渲染成图片,花费的时间较长,一张图渲染花费了大概20多s。
图片效果如下:
grid_chart.png代码如下:
#绘制地图用pyecharts
from pyecharts.charts import Bar
from pyecharts.render import make_snapshot
# 使用 snapshot-selenium 渲染图片,图片渲染慢,一张图要20多秒
# 要装chromedrive
from snapshot_selenium import snapshot
import numpy as np
from pyecharts.charts import Map,Bar,Grid
from pyecharts import options as opts
# 地图
# 模拟数据
data={
"data": [
{"name": "台湾", "value": 183},
{"name": "香港", "value": 54},
{"name": "江苏", "value": 34},
{"name": "上海", "value": 22},
{"name": "山东", "value": 45},
{"name": "辽宁", "value": 12},
{"name": "广东", "value": 56},
{"name": "四川", "value": 87},
{"name": "河南", "value": 98},
{"name": "黑龙江", "value":23},
{"name": "湖北", "value":2},
{"name": "广西", "value":3}
],
}
areas=[d["name"] for d in data['data']]
values=[d["value"] for d in data['data']]
#排序,用于条形图
data_sort=[list(z) for z in zip(areas, values)]
data_sort.sort(key=lambda x:(x[1]),reverse=True)
areas=[x[0] for x in data_sort]
values=[x[1] for x in data_sort]
# 地图
map_chart=Map()
map_chart.add(series_name='',
data_pair=[list(z) for z in zip(areas, values)],
maptype='china',
is_map_symbol_show=False)
map_chart.set_series_opts(label_opts=opts.LabelOpts(is_show=True,font_size=9)) # {a}(系列名称),{b}(区域名称),{c}(合并数值), {d}(无)
map_chart.set_global_opts(visualmap_opts=opts.VisualMapOpts(is_calculable=True,dimension=0,
min_=min(values),
max_=max(values),
# type_='color',
pos_right='100',
pos_top='center',
range_text=['样本数量',''],
# range_color=["lightskyblue", "yellow", "orangered"],
textstyle_opts=opts.TextStyleOpts(font_size=10)))
# 条形图
bar=Bar()
bar.add_xaxis(xaxis_data=areas)
bar.add_yaxis(series_name="",
yaxis_data=values,
yaxis_index=1,
label_opts=opts.LabelOpts(is_show=True,position='right',formatter='{b}:{c}',font_size=9))
bar.reversal_axis()
bar.set_global_opts(
xaxis_opts=opts.AxisOpts(is_show=False,axislabel_opts=opts.LabelOpts(is_show=False)),#不显示x轴及标签
yaxis_opts=opts.AxisOpts(is_show=True,is_inverse=True,axislabel_opts=opts.LabelOpts(is_show=False),#不显示y轴标签
axistick_opts=opts.AxisTickOpts(is_show=False), #不显示y轴tick
axisline_opts=opts.AxisLineOpts(linestyle_opts=opts.LineStyleOpts(color='rgba(0,0,0,0.5)'))), #y轴线设置
visualmap_opts=opts.VisualMapOpts(is_calculable=True,dimension=0,#设置dimension,条形图每个itme和visualmap对应
min_=min(values),
max_=max(values),
# type_='color',
pos_right='100',
pos_top='center',
range_text=['样本数量',''],
# range_color=["lightskyblue", "yellow", "orangered"],
textstyle_opts=opts.TextStyleOpts(font_size=10)))
# 地图+条形图的组合图
grid_chart=Grid()
grid_chart.add(bar, grid_opts=opts.GridOpts( pos_left="10", pos_right="80%", pos_top="70%", pos_bottom="5",is_contain_label=False))
grid_chart.add(map_chart,grid_opts=opts.GridOpts())
# 在工作目录下生成html
grid_chart.render()
# 渲染成图片
make_snapshot(snapshot, grid_chart.render(), "grid_chart.png")
以上用的是pyecharts的v1版本,相关文档见pyecharts,里面关于配置项和相关函数介绍的还是很详细的,前期是看网上的样例写的,后期要修改细节啥的,就是看着相关文档进行修改。
如果不是大批量的要求速度快的生成图片,这个库生成的图片以及在设置上的灵活性还是很不错的。
网友评论