【python实战】pyecharts绘制PictorialBar图

一直想用matplotlib来画用图片填充的柱形图,但是,摸索了好久都没找到,最后只能转战pyecharts了。

好在pyecharts还是可以实现了,先放上pyecharts的样图

pictoral bar.png

pictoral bar2.png

pictoral bar3.png

接下来就是照葫芦画瓢了。

1. 条形图

pictorialbar_horizon.png
# 颜色转换
def RGB_to_Hex(tmp):
    rgb = tmp.split(',')#将RGB格式划分开来
    strs = '#'
    for i in rgb:
        num = int(i)#将str转int
        #将R、G、B分别转化为16进制拼接转换并大写
        strs += str(hex(num))[-2:].replace('x','0').upper()
    return strs
def pic_bar_horizon(symbol,values,label,formatter,filename):
    # 调用symbol的json文件
    with open("symbol.json", "r", encoding="utf-8") as f:
        symbols = json.load(f)
    #作图
    pictorialbar=PictorialBar()
    pictorialbar.add_xaxis(label)
    pictorialbar.add_yaxis("",
        values,
        label_opts=opts.LabelOpts(position="right",formatter="{c}"+formatter,font_size=18),
        symbol_size=50,
        symbol_repeat='fixed',
        symbol_offset=[0,0],
        is_symbol_clip=True,
        symbol='path://'+symbols[symbol],
        color=RGB_to_Hex('75,172,198'),
        )
    pictorialbar.reversal_axis()
    pictorialbar.set_global_opts(
            xaxis_opts=opts.AxisOpts(is_show=False),
            yaxis_opts=opts.AxisOpts(
                axislabel_opts=opts.LabelOpts(font_size=18),
                axistick_opts=opts.AxisTickOpts(is_show=False),
                axisline_opts=opts.AxisLineOpts(
                    linestyle_opts=opts.LineStyleOpts(opacity=0))))
    pictorialbar.render()
    make_snapshot(snapshot, pictorialbar.render(),filename) 

def pic_bar_horizon_ex():
    label = ["保留月薪", "实际月薪","平均月薪","总体"]
    values = [5616.34255978742,3777.4339158062,2345.75534234,5646.98876]
    values=[format(i,'.2f') for i in values]
    symbol,filename,formatter='money',"pictorialbar_horizon.png","元"
    pic_bar_horizon(symbol,values,label,formatter,filename)

# 调用
pic_bar_horizon_ex()

2.柱状图

pictorialbar_vertical.png
def pic_bar_vertical(symbol,values,label,formatter,filename):
    # 调用symbol的json文件
    with open("symbol.json", "r", encoding="utf-8") as f:
        symbols = json.load(f)
    #作图
    pictorialbar=PictorialBar()
    pictorialbar.add_xaxis(label)
    pictorialbar.add_yaxis("",
        values,
        label_opts=opts.LabelOpts(position="top",formatter="{c}"+formatter,font_size=18),
        symbol_size=50,
        symbol_repeat='fixed',
        symbol_offset=[0,0],
        is_symbol_clip=True,
        symbol='path://'+symbols[symbol],
        color=RGB_to_Hex('75,172,198'),
        )
    pictorialbar.set_global_opts(
            xaxis_opts=opts.AxisOpts(axislabel_opts=opts.LabelOpts(font_size=18),
                axistick_opts=opts.AxisTickOpts(is_show=False),
                axisline_opts=opts.AxisLineOpts(
                    linestyle_opts=opts.LineStyleOpts(opacity=0))),
            yaxis_opts=opts.AxisOpts(is_show=False)
                )
    pictorialbar.render()
    make_snapshot(snapshot, pictorialbar.render(),filename) 

def pic_bar_vertical_ex():
    label = ["保留月薪", "实际月薪","平均月薪","总体"]
    values = [5616.34255978742,3777.4339158062,2345.75534234,5646.98876]
    values=[format(i,'.2f') for i in values]
    symbol,filename,formatter='dog',"pictorialbar_vertical.png",""
    pic_bar_vertical(symbol,values,label,formatter,filename)

# 调用
pic_bar_vertical_ex()

自定义设定symbol的话,根据pyecharts文档,可以用矢量图的路径:

symbol.png

其中,矢量图的路径的获取方式可以是:

①在Iconfont中,检索相应的icon;

icon.png

②登录,点开相应的图标;

icon2.png

③右键-检查,就会出现该矢量图的路径:

icon3.png

然后,自己造一个symbol的json文件,之后随意添加并调用就可以了,类似于:

{
"dog": "M992 192h-128l-14.32-28.62A64 64 0 0 0 792.44 128H685.2l-54.56-54.56C610.46 53.28 576 67.56 576 96.06v299.68l256 91.42V416h64c70.7 0 128-57.3 128-128v-64c0-17.68-14.32-32-32-32z m-224 96c-17.68 0-32-14.32-32-32s14.32-32 32-32 32 14.32 32 32-14.32 32-32 32zM192 448c-35.28 0-64-28.72-64-64 0-35.34-28.66-64-64-64S0 348.66 0 384c0 83.32 53.66 153.7 128 180.2V992c0 17.68 14.32 32 32 32h128c17.68 0 32-14.32 32-32V768h320v224c0 17.68 14.32 32 32 32h128c17.68 0 32-14.32 32-32V555.1L532.1 448H192z", 
"money":"M35.4432 817.92C51.2 807.3984 239.9104 650.112 250.3936 637.0048c13.1072-10.4832 26.2272-10.4832 26.2272-10.4832h314.56s49.8176 5.248 49.8176 47.1808c0 26.2144-18.3552 52.48-49.8176 57.6768-26.2144 5.248-91.7504 10.4832-138.9312 13.1072-15.7312 0 0 10.4832 0 10.4832l60.3008 39.3216h209.7152s86.5024-60.288 141.5552-99.6096c91.7376-60.3008 125.824 0 125.824 0s10.4832 20.9664 0 34.0736C939.84 770.7008 764.16 917.504 751.0912 928s-28.8256 5.248-28.8256 5.248H360.4992a90.56 90.56 0 0 0-47.1808 18.3424s-57.6768 47.1936-70.784 57.6768c-28.8384 20.9664-44.5696 0-44.5696 0l-162.56-165.12s-15.7312-15.7184 0-26.2144z m754.9696-511.2192c0 165.12-133.696 301.4656-301.4656 301.4656S187.4816 474.4832 187.4816 306.7008 321.1776 5.2352 488.96 5.2352s301.4528 133.696 301.4528 301.4656zM640.9984 146.8032c7.8592-15.7312 0-28.8384-15.7312-39.3216-18.3552-10.496-34.0864-7.872-47.1936 10.4832L486.4 251.6608l-97.0624-131.072C376.2304 104.8576 363.1232 99.6096 344.768 107.52s-23.5904 20.9664-15.7312 41.9328l94.3744 131.072H347.392c-7.8592 7.872-13.1072 13.1072-13.1072 23.6032s5.248 18.3424 13.1072 23.5904h99.6096v36.6976H347.392c-10.4832 5.248-13.1072 13.1072-13.1072 23.5904 2.56 10.4832 5.248 18.3552 13.1072 23.6032h99.6096v96.9856c-2.56 26.2144 10.4832 41.9456 36.6976 41.9456s39.3344-13.1072 39.3344-41.9456v-97.024h99.6096q15.7312-7.872 15.7312-23.6032t-15.7312-23.5904h-99.6096V325.12h99.6096c10.4832-7.872 15.7312-13.1072 15.7312-23.5904s-5.248-18.3552-15.7312-23.5904h-76.0192l94.3744-131.072z m0 0"
}
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,293评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,604评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,958评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,729评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,719评论 5 366
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,630评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,000评论 3 397
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,665评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,909评论 1 299
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,646评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,726评论 1 330
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,400评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,986评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,959评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,197评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 44,996评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,481评论 2 342