有时候自己花了许多时间与精力绘制的图表到头来被别人盗用是一件很让人感到郁闷的事情,今天小编就来分享pyecharts库当中一个知道的人不多的组件,能够帮助我们在自己绘制的图表上面加上水印或者logo,这样子自己绘制的图表就不会被别人给盗用了,更好地保护自己的劳动成果。
图片logo
pyecharts当中的Graphic组件主要用于已经绘制的图表增添图片作为背景logo,或者自定义文字来作为图表的水印,我们来看一个简单的例子,代码如下
c = (
Bar()
.add_xaxis(Faker.choose())
.add_yaxis("商家A", Faker.values())
.add_yaxis("商家B", Faker.values())
.set_global_opts(
title_opts=opts.TitleOpts(title="直方图 + 图片logo示例"),
graphic_opts=[
opts.GraphicImage(
graphic_item=opts.GraphicItem(
id_="logo", right=20, top=20, z=-10, bounding="raw", origin=[75, 75]
),
graphic_imagestyle_opts=opts.GraphicImageStyleOpts(
image="https://user-images.githubusercontent.com/19553554/71825144-2d568180-30d6-11ea-8ee0-63c849cfd934.png",
width=150,
height=150,
opacity=0.5,
),
)
],
)
.render("graphic_image_test.html")
)
可以看到绘制的直方图的图表右上角有图片logo,同时我们也能看到参数如“width”以及“height”等等用来设置图片的高度与宽度,同时参数“right”和“top”是用来调整图片的位置的,读者可以自己私底下自己去练习,除了引用网上的图片之外,我们也可以使用本地的图片来作为logo,代码如下
c = (
Bar()
.add_xaxis(Faker.choose())
.add_yaxis("商家A", Faker.values())
.add_yaxis("商家B", Faker.values())
.set_global_opts(
title_opts=opts.TitleOpts(title="直方图 + 图片logo示例"),
graphic_opts=[
opts.GraphicImage(
graphic_item=opts.GraphicItem(
id_="logo", right=20, top=20, z=-10, bounding="raw", origin=[75, 75]
),
graphic_imagestyle_opts=opts.GraphicImageStyleOpts(
image="图片路径//python1.png",
width=150,
height=150,
opacity=0.5,
),
)
],
)
.render("graphic_image_test.html")
)
出来的结果如下图所示
水印logo
我们也可以添加文字来制作logo,代码如下
c = (
Bar()
.add_xaxis(Faker.choose())
.add_yaxis("商家1", Faker.values())
.add_yaxis("商家2", Faker.values())
.set_global_opts(
title_opts=opts.TitleOpts(title="直方图 + 水印logo示例"),
graphic_opts=["代码太多了,写不下了,具体想看源码的,后台发送“pyecharts水印”"]
)
.render("graphic_rect_bar_test.html")
)
出来的结果如下,我们可以看到在图片的右下角的地方有文字“关于数据分析与可视化”作为水印logo,为此我们也可以批量的生成文字水印,不过会影响到图表的整体的美观程度,代码如下
nums = 3
right_pos = [pos for pos in range(0, 90, int(90/nums))]
right_pos = [pos for pos in right_pos]
top_pos = [pos for pos in range(0, 90, int(90/nums))]
top_pos = [pos for pos in top_pos]
pos_tur = [item for item in itertools.product(right_pos,top_pos)]
def graphics(pos):
return opts.GraphicGroup(
graphic_item=opts.GraphicItem(
rotation=100,
right=f'{pos[0]}%', top=f'{pos[1]}%', z=1),
children=[
opts.GraphicText(
graphic_item=opts.GraphicItem(
left="center", top="middle", z=1
),
graphic_textstyle_opts=opts.GraphicTextStyleOpts(
text="公众号:关于数据分析与可视化",
font=f"bold 15px Microsoft YaHei",
graphic_basicstyle_opts=opts.GraphicBasicStyleOpts(
fill="#05f7ef"
),
),
),
],
)
graphics_lst = [graphics(i) for i in pos_tur]
c = (
Bar()
.add_xaxis(Faker.choose())
.add_yaxis("商家1", Faker.values())
.add_yaxis("商家2", Faker.values())
.set_global_opts(
title_opts=opts.TitleOpts(title="直方图+批量水印示例"),
graphic_opts=graphics_lst,
)
)
c.render("watermark1.html")
我们可以将上面的代码拆开来一个一个看,首先
graphic_item=opts.GraphicItem(
rotation=100,
right=xxx%,
top=xxx%,
z=1),
这部分的代码主要来设定水印的位置,旋转的角度等等,其次是
graphic_textstyle_opts=opts.GraphicTextStyleOpts(
text="公众号:关于数据分析与可视化",
font=f"bold 20px Microsoft YaHei",
graphic_basicstyle_opts=opts.GraphicBasicStyleOpts(
fill="#05f7ef"
),
),
“text”部分表示的是水印的文字内容,而“font”代表的明显是字体以及字体大小咯,然后“fill”代表的是文字的颜色,读者可以空的时候自己调试看看,而代码
nums = 3
right_pos = [pos for pos in range(0, 90, int(90/nums))]
right_pos = [pos for pos in right_pos]
top_pos = [pos for pos in range(0, 90, int(90/nums))]
top_pos = [pos for pos in top_pos]
pos_tur = [item for item in itertools.product(right_pos,top_pos)]
这部分的代码表示的是文字logo生成的数量,要是我们将“nums”改成5,那么就会生成更多的文字水印,如下图,进一步影响图表的美观程度,估计有密集恐惧症的读者会些许感觉到不适,这个由读者自己来调节,想要源码的读者后台发送“pyecharts水印”即可获取哦
nums = 5
right_pos = [pos for pos in range(0, 100, int(100/nums))]
right_pos = [pos for pos in right_pos]
top_pos = [pos for pos in range(0, 100, int(100/nums))]
top_pos = [pos for pos in top_pos]
pos_tur = [item for item in itertools.product(right_pos,top_pos)]