pyechart的画布布局
控制画布的垂直布局-Page
page1=(Page(page_title="造价四剑客",layout=Page.SimplePageLayout))
page1.add(bar)
page1.render("造价四剑客.html")
准备好三个图,我先把一个图用page安排上去,这是效果。
再上一个图。
page1=(Page(page_title="造价四剑客",layout=Page.SimplePageLayout))
page1.add(bar,
bar2)
page1.render("造价四剑客.html")
看到这,大家肯定知道,page是在干什么了,它在竖直方向一直不停的堆积图片,称之为【顺序多图】,大家理解了吗?
page1=(Page(page_title="造价四剑客",layout=Page.SimplePageLayout))
page1.add(bar,
bar2,
bar3)
page1.render("造价四剑客.html")
堆积3个图,意料之中!!!
并行多图
我们一起来探究一下grid,首先一点,grid比page的方法多很多,其次,灵活性也更加强!!!
先上一个图,不急我们先试试!
grid1 = (
Grid(init_opts=opts.InitOpts(width="1700px",height="750px"))
.add(bar,grid_opts=opts.GridOpts(is_show=True,pos_left="10%",pos_right="40%"))
#.add(bar2,grid_opts=opts.GridOpts(is_show=True,pos_left="20%",pos_right="50%"))
.render("造价四剑客.html")
)
好的现在再来,再加一个。
grid1 = (Grid(init_opts=opts.InitOpts(width="1700px",height="750px")))
grid1.add(bar,grid_opts=opts.GridOpts(is_show=True,pos_right="55%"))
grid1.add(bar2,grid_opts=opts.GridOpts(is_show=True,pos_left="55%"))
grid1.render("造价四剑客.html")
看看中间的图例,全部重合,完了。
不急,我们一起来调整一下全局配置就好。和我一起来!
给bar和bar2分别加上.set_global_opts,详细代码如下:
#bar的全部代码
bar = (
Bar()
.add_xaxis(Faker.week)
.add_yaxis(
"蒸发量",
[2.0, 4.9, 7.0, 23.2, 25.6, 76.7, 135.6, 162.2, 32.6, 20.0, 6.4, 3.3],
#yaxis_index=0,
color="#d14a61",
)
.add_yaxis(
"降水量",
[2.6, 5.9, 9.0, 26.4, 28.7, 70.7, 175.6, 182.2, 48.7, 18.8, 6.0, 2.3],
#yaxis_index=1,
color="#5793f3",
)
.set_global_opts(legend_opts=opts.LegendOpts(pos_left="25%"))
#bar2的全部代码
bar2 = (
Bar()
.add_xaxis(
[
"名字很长的X轴标签1",
"名字很长的X轴标签2",
"名字很长的X轴标签3",
"名字很长的X轴标签4",
"名字很长的X轴标签5",
"名字很长的X轴标签6",
]
)
.add_yaxis("商家A", [10, 20, 30, 40, 50, 40])
.add_yaxis("商家B", [20, 10, 40, 30, 40, 50])
.set_global_opts(
xaxis_opts=opts.AxisOpts(axislabel_opts=opts.LabelOpts(rotate=-15)),
title_opts=opts.TitleOpts(title="", subtitle=""),
legend_opts=opts.LegendOpts(pos_right="25%")
)
)
最后的效果如下:【是不是搞定了?】
并且我们可以看到的是,这个图是在同一层摆放的。
顺序并行综合应用
现在我们来综合运用一下,来加强我们的布局美观
Tips:当你把图片布局的代码换成这样
grid1 = (Grid(init_opts=opts.InitOpts(width="1700px",height="750px")))
grid1.add(bar,grid_opts=opts.GridOpts(is_show=True,pos_right="55%"))
grid1.add(bar2,grid_opts=opts.GridOpts(is_show=True,pos_left="25%"))
grid1.render("造价四剑客.html")
# 原来是这样的
grid1 = (Grid(init_opts=opts.InitOpts(width="1700px",height="750px")))
grid1.add(bar,grid_opts=opts.GridOpts(is_show=True,pos_right="55%"))
grid1.add(bar2,grid_opts=opts.GridOpts(is_show=True,pos_left="55%"))
grid1.render("造价四剑客.html")
你会发现自己的图片,竟然重叠在一起了,这是不想看到的,所以希望你可以调整好自己的pos_left和pos_right参数。
接下来我们进入正题!
grid1 = (Grid(init_opts=opts.InitOpts(width="1600px")))
grid1.add(bar,grid_opts=opts.GridOpts(is_show=True,pos_right="55%"))
grid1.add(bar2,grid_opts=opts.GridOpts(is_show=True,pos_left="55%"))
page1=(Page(page_title="造价四剑客",layout=Page.SimplePageLayout))
page1.add(grid1)
page1.add(bar3)
page1.render("造价四剑客.html")
成功组合在一起了。
最后我想说,平时用的比较多的一般是grid,page用的比较少,因为在一个页面中你可以很容易的完成你的大屏布局,但是如果你想要滚动式的,多方面进行相应的图表展示,可能你就会用到很多page了。
附上全部代码:
from pyecharts.charts import Page,Bar,Grid
from pyecharts import options as opts
from pyecharts.faker import Faker
bar = (
Bar()
.add_xaxis(Faker.week)
.add_yaxis(
"蒸发量",
[2.0, 4.9, 7.0, 23.2, 25.6, 76.7, 135.6, 162.2, 32.6, 20.0, 6.4, 3.3],
#yaxis_index=0,
color="#d14a61",
)
.add_yaxis(
"降水量",
[2.6, 5.9, 9.0, 26.4, 28.7, 70.7, 175.6, 182.2, 48.7, 18.8, 6.0, 2.3],
#yaxis_index=1,
color="#5793f3",
)
.set_global_opts(legend_opts=opts.LegendOpts(pos_left="25%"))
# .extend_axis(
# yaxis=opts.AxisOpts(
# name="蒸发量",
# type_="value",
# min_=0,
# max_=250,
# position="right",
# axisline_opts=opts.AxisLineOpts(
# linestyle_opts=opts.LineStyleOpts(color="#d14a61")
# ),
# axislabel_opts=opts.LabelOpts(formatter="{value} ml"),
# )
# )
# .extend_axis(
# yaxis=opts.AxisOpts(
# type_="value",
# name="温度",
# min_=0,
# max_=25,
# position="left",
# axisline_opts=opts.AxisLineOpts(
# linestyle_opts=opts.LineStyleOpts(color="#675bba")
# ),
# axislabel_opts=opts.LabelOpts(formatter="{value} °C"),
# splitline_opts=opts.SplitLineOpts(
# is_show=True, linestyle_opts=opts.LineStyleOpts(opacity=1)
# ),
# )
# )
# .set_global_opts(
# yaxis_opts=opts.AxisOpts(
# name="降水量",
# min_=0,
# max_=250,
# position="right",
# offset=80,
# axisline_opts=opts.AxisLineOpts(
# linestyle_opts=opts.LineStyleOpts(color="#5793f3")
# ),
# axislabel_opts=opts.LabelOpts(formatter="{value} ml"),
# ),
# title_opts=opts.TitleOpts(title=""),
# tooltip_opts=opts.TooltipOpts(trigger="axis", axis_pointer_type="cross"),
# )
)
bar3 = (
Bar()
.add_xaxis(Faker.choose())
.add_yaxis("商家A", Faker.values(), stack="stack1")
.add_yaxis("商家B", Faker.values(), stack="stack1")
.set_series_opts(label_opts=opts.LabelOpts(is_show=False))
.set_global_opts(title_opts=opts.TitleOpts(title=""))
)
bar2 = (
Bar()
.add_xaxis(
[
"名字很长的X轴标签1",
"名字很长的X轴标签2",
"名字很长的X轴标签3",
"名字很长的X轴标签4",
"名字很长的X轴标签5",
"名字很长的X轴标签6",
]
)
.add_yaxis("商家A", [10, 20, 30, 40, 50, 40])
.add_yaxis("商家B", [20, 10, 40, 30, 40, 50])
.set_global_opts(
xaxis_opts=opts.AxisOpts(axislabel_opts=opts.LabelOpts(rotate=-15)),
title_opts=opts.TitleOpts(title="", subtitle=""),
legend_opts=opts.LegendOpts(pos_right="25%")
)
)
from pyecharts import options as opts
from pyecharts.charts import Graph
nodes = [
{"name": "结点1", "symbolSize": 10},
{"name": "结点2", "symbolSize": 20},
{"name": "结点3", "symbolSize": 30},
{"name": "结点4", "symbolSize": 40},
{"name": "结点5", "symbolSize": 50},
{"name": "结点6", "symbolSize": 40},
{"name": "结点7", "symbolSize": 30},
{"name": "结点8", "symbolSize": 20},
]
links = []
for i in nodes:
for j in nodes:
links.append({"source": i.get("name"), "target": j.get("name")})
c = (
Graph()
.add("", nodes, links, repulsion=8000)
.set_global_opts(title_opts=opts.TitleOpts(title="Graph-基本示例"))
)
grid1 = (Grid(init_opts=opts.InitOpts(width="1600px")))
grid1.add(bar,grid_opts=opts.GridOpts(is_show=True,pos_right="55%"))
grid1.add(bar2,grid_opts=opts.GridOpts(is_show=True,pos_left="55%"))
page1=(Page(page_title="造价四剑客",layout=Page.SimplePageLayout))
page1.add(grid1)
page1.add(bar3)
page1.add(c)
page1.render("造价四剑客.html")
最后希望大家事事如意,都能完成自己的理想!!!