象形柱图是可以设置各种具象图形元素的柱状图。往往用在信息图中,用于有至少一个类目轴或时间轴的直角坐标系上。它既可以用图形的长宽变形表现数据,也可以用图形的个数、甚至是图形的颜色、透明度变化表现数据。
下面给大家介绍一下常见象形柱状图的画法:
一、基本象形柱状图
基本象形柱状图较普通柱状图,就是把图形用具体图像表示,pyecharts提供的标记类型包括 'circle', 'rect', 'roundRect', 'triangle', 'diamond', 'pin', 'arrow', 'none'
from pyecharts import options as optsfrom pyecharts.charts import PictorialBarfrom pyecharts.globals import SymbolTypelocation = ["山西", "四川", "西藏", "北京", "上海", "内蒙古", "云南", "黑龙江", "广东", "福建"]values = [13, 42, 67, 81, 86, 94, 166, 220, 249, 262]c = ( PictorialBar() .add_xaxis(location) #X轴坐标 .add_yaxis( #y轴坐标 "", values, #数值 label_opts=opts.LabelOpts(is_show=False), #不显示数值 symbol_size=18, #图形大小 symbol_repeat="fixed", #指定图形元素是否重复 symbol_offset=[0, 0], #图形相对于原本位置的偏移 is_symbol_clip=True, #是否剪裁图形 symbol=SymbolType.TRIANGLE, #图形类型 color='#008B8B' ) .reversal_axis() .set_global_opts( title_opts=opts.TitleOpts(), xaxis_opts=opts.AxisOpts(is_show=False), #不显示x轴 yaxis_opts=opts.AxisOpts( axistick_opts=opts.AxisTickOpts(is_show=False), #不显示y轴 axisline_opts=opts.AxisLineOpts( linestyle_opts=opts.LineStyleOpts(opacity=0) #不显示坐标线 ), ), ))c.render_notebook()
参数介绍:
add_xaxis:x轴坐标add_yaxis:y轴坐标reversal_axis:图形反转AxisOpts:设置x轴坐标AxisOpts:设置y轴坐标
二、引接外部图片
如果感觉pyecharts自带图形不够过瘾,不用怕,我们可以引用外接图片,下面给大家介绍两种方法:
1.引用矢量路径
这里给大家推荐1个网站:
https://www.iconfont.cn/search/index
这里有大量的矢量图形
以火狐浏览器为例,选择自己喜欢的图形,打开抓包工具点击下载
打开json格式的返回数据:
svg的内容就是该图片的矢量路径。可以将自己喜欢的图片矢量路径存入json格式文件:
这样以后就可以直接调用了
import jsonfrom pyecharts import options as optsfrom pyecharts.charts import PictorialBarkind = ["汽车", "山", "狗", "人"]with open("symbol.json", "r", encoding="utf-8") as f: symbols = json.load(f)c = ( PictorialBar() .add_xaxis(kind) .add_yaxis( "2019", [ {"value": 184, "symbol": 'path://'+symbols["car"]}, {"value": 89, "symbol": 'path://'+symbols["hill"]}, {"value": 73, "symbol": 'path://'+symbols["dog"]}, {"value": 91, "symbol": 'path://'+symbols["people"]}, #引用矢量图形 ], label_opts=opts.LabelOpts(is_show=False), symbol_size=22, symbol_repeat="fixed", symbol_offset=[0, 5], #调整图片位置,否则会重叠 is_symbol_clip=True, symbol_rotate=180, #对图形进行旋转 color='#32CD32' ) .add_yaxis( "2020", [ {"value": 114, "symbol": 'path://'+symbols["car"]}, {"value": 69, "symbol": 'path://'+symbols["hill"]}, {"value": 85, "symbol": 'path://'+symbols["dog"]}, {"value": 73, "symbol": 'path://'+symbols["people"]}, #引用矢量图形 ], label_opts=opts.LabelOpts(is_show=False), symbol_size=22, symbol_repeat="fixed", symbol_offset=[0, -25], #调整图片位置,否则会重叠 is_symbol_clip=True, symbol_rotate=180, #对图形进行旋转 color='#FF4500' ) .reversal_axis() .set_global_opts( title_opts=opts.TitleOpts(), xaxis_opts=opts.AxisOpts(is_show=False), yaxis_opts=opts.AxisOpts( axistick_opts=opts.AxisTickOpts(is_show=False), axisline_opts=opts.AxisLineOpts( linestyle_opts=opts.LineStyleOpts(opacity=0) ), ), ))c.render_notebook()
参数介绍都在程序中
2.调用图片url
c = ( PictorialBar() .add_xaxis(location) .add_yaxis( "", [ {"value": 73, "symbol": 'image://'+url_t1}, {"value": 84, "symbol": 'image://'+url_t2}, {"value": 47, "symbol": 'image://'+url_t3}, {"value": 83, "symbol": 'image://'+url_t4}, #引用url图形 ], label_opts=opts.LabelOpts(is_show=False), symbol_size=60, symbol_repeat="fixed", symbol_offset=[0, 0], is_symbol_clip=True, ) .reversal_axis() .set_global_opts( title_opts=opts.TitleOpts(), xaxis_opts=opts.AxisOpts(is_show=False), yaxis_opts=opts.AxisOpts( axistick_opts=opts.AxisTickOpts(is_show=False), axisline_opts=opts.AxisLineOpts( linestyle_opts=opts.LineStyleOpts(opacity=0) ), ), ))c.render_notebook()
和第一种方法区别在于图片地址不同,但是却更方便一些,基本所有图片都能引用。
-完-