Pyecharts组合图_Bar,利用Page()
# -*- coding: utf-8 -*-
"""
Take small actions every day to advance your dreams.
"""
from pyecharts.globals import CurrentConfig, OnlineHostType # 事先导入,防止不出图
from pyecharts import options as opts # 配置项
from pyecharts.charts import Bar,Bar3D, Page # 各个图形的类
from pyecharts.faker import Faker # 自身数据
from pyecharts.commons.utils import JsCode
from pyecharts.globals import ThemeType
import random
def barBase() -> Bar:
bar_base = (
Bar(init_opts=opts.InitOpts(width="900px", height="500px", page_title="my title",bg_color="#FFFACD",theme = "blue",))
.add_xaxis(Faker.choose())
.add_yaxis("商家A", Faker.values(), color="#FF00FF",)
.add_yaxis("商家B", Faker.values(), color="#0000FF",)
.set_global_opts(title_opts=opts.TitleOpts(title="Bar-基本\n示例", subtitle="我是副标题", title_link="http://www.baidu.com", pos_left="40"),
toolbox_opts=opts.ToolboxOpts(),
legend_opts=opts.LegendOpts(is_show=True, pos_left=290, legend_icon="arrow", ),
)
)
return bar_base
def barBaseDictConfig() -> Bar:
bar_base_dict_config = (
Bar({"theme": ThemeType.MACARONS})
.add_xaxis(Faker.choose())
.add_yaxis("商家A", Faker.values())
.add_yaxis("商家B", Faker.values())
.set_global_opts(
title_opts={"text": "Bar-通过 dict 进行配置", "subtext": "我也是通过 dict 进行配置的"}
)
)
return bar_base_dict_config
def barBaseWithAnimation() -> Bar:
c = (
Bar(
init_opts=opts.InitOpts(
animation_opts=opts.AnimationOpts(
animation_delay=10, animation_easing="elasticOut"
)
)
)
.add_xaxis(Faker.choose())
.add_yaxis("商家A", Faker.values())
.add_yaxis("商家B", Faker.values())
.set_global_opts(title_opts=opts.TitleOpts(title="Bar-动画配置基本示例", subtitle="我是副标题"))
)
return c
def barBaseWithCustomBackgroundImage() ->Bar:
c = (
Bar(
init_opts=opts.InitOpts(
bg_color={"type": "pattern", "image": JsCode("img"), "repeat": "repeat"}
)
)
.add_xaxis(Faker.choose())
.add_yaxis("商家A", Faker.values())
.add_yaxis("商家B", Faker.values())
.set_global_opts(
title_opts=opts.TitleOpts(
title="Bar-背景图基本示例",
subtitle="我是副标题",
title_textstyle_opts=opts.TextStyleOpts(color="white"),
)
)
.add_js_funcs(
"""
var img = new Image(); img.src = 'https://s2.ax1x.com/2019/07/08/ZsS0fK.jpg';
"""
)
)
return c
def barBorderRadius()->Bar:
c = (
Bar(init_opts=opts.InitOpts(width="900px", height="500px", page_title="my title",bg_color="#FFFACD",theme = "blue",))
.add_xaxis(Faker.choose())
.add_yaxis("商家A", Faker.values(), category_gap="50%")
.add_yaxis("商家B", Faker.values(), category_gap="50%")
.set_series_opts(
label_opts=opts.LabelOpts(is_show=False),
markline_opts=opts.MarkLineOpts(
data=[opts.MarkLineItem(y=50, name="yAxis=50")]
),
itemstyle_opts={
"normal": {
"barBorderRadius": [30, 0, 30, 0],
"shadowColor": "rgb(0, 160, 221)",
}
}
)
.set_global_opts(title_opts=opts.TitleOpts(title="Bar-渐变圆柱"))
)
return c
def barChartDisplayDelay()->Bar:
category = ["类目{}".format(i) for i in range(0, 100)]
red_bar = [
0,
-8.901463875624668,
-17.025413764148556,
-24.038196249566663,
-29.66504684804471,
-33.699527649688676,
-36.00971978255796,
-36.541005056170455,
-35.31542466107655,
-32.427752866005996,
-28.038563739693934,
-22.364693082297347,
-15.667600860943732,
-8.240217424060843,
-0.3929067389459173,
7.560799717904647,
15.318054209871054,
22.599523033552096,
29.16065418543528,
34.800927952557615,
39.37074152590451,
42.77569739999406,
44.97819140223978,
45.99632376477021,
45.900279829731865,
44.806440199911805,
42.86957840395034,
40.2735832137877,
37.22119936652441,
33.92331243435557,
30.588309963978517,
27.412031986865767,
24.56878097935778,
22.203796820272576,
20.427519715115604,
19.311867685884827,
18.888649906111855,
19.150128087782186,
20.051630602288828,
21.516023200879346,
23.439750867099516,
25.700091656548704,
28.163208735293757,
30.692553648214542,
33.1571635093161,
35.439407573791215,
37.44177367693234,
39.09234039030659,
40.34865356244595,
41.19981246258526,
41.66666666666667,
41.80012531240646,
41.67768039516203,
41.39834040182826,
41.07625507973403,
40.833382300579814,
40.79160029175877,
41.06470032034727,
41.75070457358366,
42.924940903672564,
44.63427081999565,
46.89281122872821,
49.679416561286956,
52.93709961387478,
56.574470884754874,
60.46917221906629,
64.47317623531558,
68.41972346252496,
72.1315793340836,
75.43021771943799,
78.14548044723074,
80.12522637371026,
81.24447108408411,
81.41353029256493,
80.58471628367427,
78.75719600392792,
75.97969924353211,
72.35086229880064,
68.01710226438443,
63.16803467673056,
58.029567166714706,
52.854918421647554,
47.91391949819902,
43.48104807503482,
39.82272085822884,
37.18442111754884,
35.778264289169215,
35.77160292258658,
37.27724241244461,
40.345781666728996,
44.96051012913295,
51.035187614675685,
58.41491053964701,
66.8801325453253,
76.15376513468516,
85.91114110149952,
95.79248672571518,
105.41742429574506,
114.40092042993717,
122.37001313784816,
]
blue_bar = [
-50,
-47.18992898088751,
-42.54426104547181,
-36.290773900754886,
-28.71517529663627,
-20.146937097399626,
-10.94374119697364,
-1.4752538113770308,
7.893046603320797,
16.81528588241657,
24.979206795219028,
32.11821023962515,
38.02096119056733,
42.53821720798438,
45.58667093073836,
47.14973738101559,
47.275355710354944,
46.07100702178889,
43.6962693226927,
40.35333240268025,
36.275975292575026,
31.71756381888028,
26.938653692729076,
22.194784893913152,
17.725026430574392,
13.741778696752679,
10.422266555457615,
7.902063853319403,
6.270884006107842,
5.570756810898967,
5.796594266992678,
6.899033489892203,
8.7893381290192,
11.346045936704996,
14.42297348773613,
17.858132851517098,
21.483081596548438,
25.132218074866262,
28.651548555679597,
31.906490373810854,
34.788333671419466,
37.21906041552118,
39.154309232933485,
40.58437366457342,
41.5332247510366,
42.05565130942339,
42.23270781895,
42.165745792772285,
41.969375711588256,
41.76375960543808,
41.66666666666667,
41.7857343479728,
42.21136481847887,
43.01065209435119,
44.22268037417866,
45.855461823273586,
47.88469584957917,
50.25443606443524,
52.879650371477126,
55.650558977584225,
58.43853958732492,
61.10330341815434,
63.500974294013034,
65.49264961151306,
66.95298925309743,
67.77836838841961,
67.89414332224722,
67.26061575374229,
65.87733853082335,
63.785482681031894,
61.068077697490004,
57.84804048526095,
54.284018163297375,
50.564180830851214,
46.89820707575337,
43.50780217852947,
40.616171775045245,
38.4369379107128,
37.16302649485318,
36.95607267600796,
37.93688225696513,
40.17745279877072,
43.694998595987045,
48.44834150353593,
54.33692802801367,
61.20261650152743,
68.83425165632042,
76.97491319735354,
85.33159602026458,
93.58695857541488,
101.4126683297632,
108.48378461530217,
114.49355390682695,
119.16795429637915,
122.27931702317058,
123.65837448506679,
123.20413594805603,
120.89107255501017,
116.7731992576505,
110.98476877890735,
]
c = (
Bar(init_opts=opts.InitOpts(width="1600px",height="800px"))
.add_xaxis(xaxis_data=category)
.add_yaxis(
series_name="bar",
y_axis=red_bar,
label_opts=opts.LabelOpts(is_show=False)
)
.add_yaxis(
series_name="bar2",
y_axis=blue_bar, # yaxis_data=blue_bar报错,对y轴进行赋值最新版本不能用yaxis_data,要用y_axis
label_opts=opts.LabelOpts(is_show=False),
)
.set_global_opts(
title_opts=opts.TitleOpts(title="柱状图动画延迟"),
xaxis_opts=opts.AxisOpts(splitline_opts=opts.SplitLineOpts(is_show=False)),
yaxis_opts=opts.AxisOpts(
axistick_opts=opts.AxisTickOpts(is_show=True),
splitline_opts=opts.SplitLineOpts(is_show=True),
),
)
)
return c
def barCustomBarColor()->Bar:
color_function = """
function (params) {
if (params.value > 0 && params.value < 50) {
return 'red';
} else if (params.value > 50 && params.value < 100) {
return 'blue';
}
return 'green';
}
"""
c = (
Bar()
.add_xaxis(Faker.choose())
.add_yaxis(
"商家A",
Faker.values(),
itemstyle_opts=opts.ItemStyleOpts(color=JsCode(color_function)),
)
.add_yaxis(
"商家B",
Faker.values(),
itemstyle_opts=opts.ItemStyleOpts(color=JsCode(color_function)),
)
.add_yaxis(
"商家C",
Faker.values(),
itemstyle_opts=opts.ItemStyleOpts(color=JsCode(color_function)),
)
.set_global_opts(title_opts=opts.TitleOpts(title="Bar-自定义柱状颜色"))
)
return c
def barDataZoomBoth()->Bar:
c = (
Bar()
.add_xaxis(Faker.days_attrs)
.add_yaxis("商家A", Faker.days_values, color=Faker.rand_color())
.set_global_opts(
title_opts=opts.TitleOpts(title="Bar-DataZoom(slider+inside)"),
datazoom_opts=[opts.DataZoomOpts(), opts.DataZoomOpts(type_="inside")],
)
)
return c
def barDataZoomInside()->Bar:
c = (
Bar()
.add_xaxis(Faker.days_attrs)
.add_yaxis("商家A", Faker.days_values, color=Faker.rand_color())
.set_global_opts(
title_opts=opts.TitleOpts(title="Bar-DataZoom(inside)"),
datazoom_opts=opts.DataZoomOpts(type_="inside"),
)
)
return c
def barDataZoomSlider()->Bar:
c = (
Bar()
.add_xaxis(Faker.days_attrs)
.add_yaxis("商家A", Faker.days_values)
.set_global_opts(
title_opts=opts.TitleOpts(title="Bar-DataZoom(slider-水平)"),
datazoom_opts=opts.DataZoomOpts(),
)
)
return c
def barDataZoomSliderVertical()->Bar:
c = (
Bar()
.add_xaxis(Faker.days_attrs)
.add_yaxis("商家A", Faker.days_values, color=Faker.rand_color())
.set_global_opts(
title_opts=opts.TitleOpts(title="Bar-DataZoom(slider-垂直)"),
datazoom_opts=opts.DataZoomOpts(orient="vertical"),
)
)
return c
def barDifferentSeriesGap()->Bar:
c = (
Bar()
.add_xaxis(Faker.choose())
.add_yaxis("商家A", Faker.values(), gap="0%")
.add_yaxis("商家B", Faker.values(), gap="0%")
.set_global_opts(title_opts=opts.TitleOpts(title="Bar-不同系列柱间距离"))
)
return c
def barGraphicComponent()->Bar:
c = (
Bar()
.add_xaxis(Faker.choose())
.add_yaxis("商家A", Faker.values())
.add_yaxis("商家B", Faker.values())
.set_global_opts(
title_opts=opts.TitleOpts(title="Bar-Graphic 组件示例"),
graphic_opts=[
opts.GraphicGroup(
graphic_item=opts.GraphicItem(
rotation=JsCode("Math.PI / 4"),
bounding="raw",
right=110,
bottom=110,
z=100,
),
children=[
opts.GraphicRect(
graphic_item=opts.GraphicItem(
left="center", top="center", z=100
),
graphic_shape_opts=opts.GraphicShapeOpts(width=400, height=50),
graphic_basicstyle_opts=opts.GraphicBasicStyleOpts(
fill="rgba(0,0,0,0.3)"
),
),
opts.GraphicText(
graphic_item=opts.GraphicItem(
left="center", top="center", z=100
),
graphic_textstyle_opts=opts.GraphicTextStyleOpts(
text="pyecharts bar chart",
font="bold 26px Microsoft YaHei",
graphic_basicstyle_opts=opts.GraphicBasicStyleOpts(
fill="#fff"
),
),
),
],
)
],
)
)
return c
def barHistogram()->Bar:
c = (
Bar()
.add_xaxis(Faker.choose())
.add_yaxis("商家A", Faker.values(), category_gap=0, color=Faker.rand_color())
.set_global_opts(title_opts=opts.TitleOpts(title="Bar-直方图"))
)
return c
def barHistogramColor()->Bar:
x = Faker.dogs + Faker.animal
xlen = len(x)
y = []
for idx, item in enumerate(x):
if idx <= xlen / 2:
y.append(
opts.BarItem(
name=item,
value=(idx + 1) * 10,
itemstyle_opts=opts.ItemStyleOpts(color="#749f83"),
)
)
else:
y.append(
opts.BarItem(
name=item,
value=(xlen + 1 - idx) * 10,
itemstyle_opts=opts.ItemStyleOpts(color="#d48265"),
)
)
c = (
Bar()
.add_xaxis(x)
.add_yaxis("series0", y, category_gap=0, color=Faker.rand_color())
.set_global_opts(title_opts=opts.TitleOpts(title="Bar-直方图(颜色区分)"))
)
return c
def barIsSelected()->Bar:
c = (
Bar()
.add_xaxis(Faker.choose())
.add_yaxis("商家A", Faker.values())
.add_yaxis("商家B", Faker.values(), is_selected=False)
.set_global_opts(title_opts=opts.TitleOpts(title="Bar-默认取消显示某 Series"))
)
return c
def barMarklineCustom()->Bar:
c = (
Bar()
.add_xaxis(Faker.choose())
.add_yaxis("商家A", Faker.values())
.add_yaxis("商家B", Faker.values())
.set_global_opts(title_opts=opts.TitleOpts(title="Bar-MarkLine(自定义)"))
.set_series_opts(
label_opts=opts.LabelOpts(is_show=False),
markline_opts=opts.MarkLineOpts(
data=[opts.MarkLineItem(y=40, name="yAxis=50")]
),
)
)
return c
def barMarkLineType()->Bar:
c = (
Bar()
.add_xaxis(Faker.choose())
.add_yaxis("商家A", Faker.values())
.add_yaxis("商家B", Faker.values())
.set_global_opts(title_opts=opts.TitleOpts(title="Bar-MarkLine(指定类型)"))
.set_series_opts(
label_opts=opts.LabelOpts(is_show=False),
markline_opts=opts.MarkLineOpts(
data=[
opts.MarkLineItem(type_="min", name="最小值"),
opts.MarkLineItem(type_="max", name="最大值"),
opts.MarkLineItem(type_="average", name="平均值"),
]
),
)
)
return c
def barMarkPointCustom()->Bar:
x, y = Faker.choose(), Faker.values()
c = (
Bar()
.add_xaxis(x)
.add_yaxis(
"商家A",
y,
markpoint_opts=opts.MarkPointOpts(
data=[opts.MarkPointItem(name="自定义标记点", coord=[x[2], y[2]], value=y[2])]
),
)
.add_yaxis("商家B", Faker.values())
.set_global_opts(title_opts=opts.TitleOpts(title="Bar-MarkPoint(自定义)"))
.set_series_opts(label_opts=opts.LabelOpts(is_show=False))
)
return c
def barMarkPointType()->Bar:
c = (
Bar()
.add_xaxis(Faker.choose())
.add_yaxis("商家A", Faker.values())
.add_yaxis("商家B", Faker.values())
.set_global_opts(title_opts=opts.TitleOpts(title="Bar-MarkPoint(指定类型)"))
.set_series_opts(
label_opts=opts.LabelOpts(is_show=False),
markpoint_opts=opts.MarkPointOpts(
data=[
opts.MarkPointItem(type_="max", name="最大值"),
opts.MarkPointItem(type_="min", name="最小值"),
opts.MarkPointItem(type_="average", name="平均值"),
]
),
)
)
return c
def barReversalAxis()->Bar:
c = (
Bar()
.add_xaxis(Faker.choose())
.add_yaxis("商家A", Faker.values())
.add_yaxis("商家B", Faker.values())
.reversal_axis()
.set_series_opts(label_opts=opts.LabelOpts(position="right"))
.set_global_opts(title_opts=opts.TitleOpts(title="Bar-翻转 XY 轴"))
)
return c
def barRotateXaxisLabel()->Bar:
c = (
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="Bar-旋转X轴标签", subtitle="解决标签名字过长的问题"),
)
)
return c
def barSameSeriesGap()->Bar:
c = (
Bar()
.add_xaxis(Faker.choose())
.add_yaxis("商家A", Faker.values(), category_gap="50%")
.set_global_opts(title_opts=opts.TitleOpts(title="Bar-单系列柱间距离")
)
)
return c
def barStack0()->Bar:
c = (
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="Bar-堆叠数据(全部)"))
)
return c
def barStack1()->Bar:
c = (
Bar()
.add_xaxis(Faker.choose())
.add_yaxis("商家A", Faker.values(), stack="stack1")
.add_yaxis("商家B", Faker.values(), stack="stack1")
.add_yaxis("商家C", Faker.values())
.set_series_opts(label_opts=opts.LabelOpts(is_show=False))
.set_global_opts(title_opts=opts.TitleOpts(title="Bar-堆叠数据(部分)")
)
)
return c
def barToolbox()->Bar:
c = (
Bar()
.add_xaxis(Faker.choose())
.add_yaxis("商家A", Faker.values())
.add_yaxis("商家B", Faker.values())
.set_global_opts(
title_opts=opts.TitleOpts(title="Bar-显示 ToolBox"),
toolbox_opts=opts.ToolboxOpts(),
legend_opts=opts.LegendOpts(is_show=False),
)
)
return c
def barWaterFallPlot()->Bar:
x_data = [f"11月{str(i)}日" for i in range(1, 12)]
y_total = [0, 900, 1245, 1530, 1376, 1376, 1511, 1689, 1856, 1495, 1292]
y_in = [900, 345, 393, "-", "-", 135, 178, 286, "-", "-", "-"]
y_out = ["-", "-", "-", 108, 154, "-", "-", "-", 119, 361, 203]
bar = (
Bar()
.add_xaxis(xaxis_data=x_data)
.add_yaxis(
series_name="",
y_axis=y_total,
stack="总量",
itemstyle_opts=opts.ItemStyleOpts(color="rgba(0,0,0,0)"),
)
.add_yaxis(series_name="收入", y_axis=y_in, stack="总量")
.add_yaxis(series_name="支出", y_axis=y_out, stack="总量")
.set_global_opts(yaxis_opts=opts.AxisOpts(type_="value"))
)
return bar
def barWithBrush()->Bar:
c = (
Bar()
.add_xaxis(Faker.choose())
.add_yaxis("商家A", Faker.values())
.add_yaxis("商家B", Faker.values())
.set_global_opts(
title_opts=opts.TitleOpts(title="Bar-Brush示例", subtitle="我是副标题"),
brush_opts=opts.BrushOpts(),
)
)
return c
def barXyaxisName()->Bar:
c = (
Bar()
.add_xaxis(Faker.choose())
.add_yaxis("商家A", Faker.values())
.add_yaxis("商家B", Faker.values())
.set_global_opts(
title_opts=opts.TitleOpts(title="Bar-XY 轴名称"),
yaxis_opts=opts.AxisOpts(name="我是 Y 轴"),
xaxis_opts=opts.AxisOpts(name="我是 X 轴"),
)
)
return c
def barYaxisFormatter()->Bar:
c = (
Bar()
.add_xaxis(Faker.choose())
.add_yaxis("商家A", Faker.values())
.add_yaxis("商家B", Faker.values())
.set_global_opts(
title_opts=opts.TitleOpts(title="Bar-Y 轴 formatter"),
yaxis_opts=opts.AxisOpts(axislabel_opts=opts.LabelOpts(formatter="{value} /月")),
)
)
return c
def bar3dBase()->Bar:
data = [(i, j, random.randint(0, 12)) for i in range(6) for j in range(24)]
c = (
Bar3D()
.add(
"",
[[d[1], d[0], d[2]] for d in data],
xaxis3d_opts=opts.Axis3DOpts(Faker.clock, type_="category"),
yaxis3d_opts=opts.Axis3DOpts(Faker.week_en, type_="category"),
zaxis3d_opts=opts.Axis3DOpts(type_="value"),
)
.set_global_opts(
visualmap_opts=opts.VisualMapOpts(max_=20),
title_opts=opts.TitleOpts(title="Bar3D-基本示例"),
)
)
return c
def bar3dPunchCard()->Bar:
hours = [
"12a",
"1a",
"2a",
"3a",
"4a",
"5a",
"6a",
"7a",
"8a",
"9a",
"10a",
"11a",
"12p",
"1p",
"2p",
"3p",
"4p",
"5p",
"6p",
"7p",
"8p",
"9p",
"10p",
"11p",
]
days = ["Saturday", "Friday", "Thursday", "Wednesday", "Tuesday", "Monday", "Sunday"]
data = [
[0, 0, 5],
[0, 1, 1],
[0, 2, 0],
[0, 3, 0],
[0, 4, 0],
[0, 5, 0],
[0, 6, 0],
[0, 7, 0],
[0, 8, 0],
[0, 9, 0],
[0, 10, 0],
[0, 11, 2],
[0, 12, 4],
[0, 13, 1],
[0, 14, 1],
[0, 15, 3],
[0, 16, 4],
[0, 17, 6],
[0, 18, 4],
[0, 19, 4],
[0, 20, 3],
[0, 21, 3],
[0, 22, 2],
[0, 23, 5],
[1, 0, 7],
[1, 1, 0],
[1, 2, 0],
[1, 3, 0],
[1, 4, 0],
[1, 5, 0],
[1, 6, 0],
[1, 7, 0],
[1, 8, 0],
[1, 9, 0],
[1, 10, 5],
[1, 11, 2],
[1, 12, 2],
[1, 13, 6],
[1, 14, 9],
[1, 15, 11],
[1, 16, 6],
[1, 17, 7],
[1, 18, 8],
[1, 19, 12],
[1, 20, 5],
[1, 21, 5],
[1, 22, 7],
[1, 23, 2],
[2, 0, 1],
[2, 1, 1],
[2, 2, 0],
[2, 3, 0],
[2, 4, 0],
[2, 5, 0],
[2, 6, 0],
[2, 7, 0],
[2, 8, 0],
[2, 9, 0],
[2, 10, 3],
[2, 11, 2],
[2, 12, 1],
[2, 13, 9],
[2, 14, 8],
[2, 15, 10],
[2, 16, 6],
[2, 17, 5],
[2, 18, 5],
[2, 19, 5],
[2, 20, 7],
[2, 21, 4],
[2, 22, 2],
[2, 23, 4],
[3, 0, 7],
[3, 1, 3],
[3, 2, 0],
[3, 3, 0],
[3, 4, 0],
[3, 5, 0],
[3, 6, 0],
[3, 7, 0],
[3, 8, 1],
[3, 9, 0],
[3, 10, 5],
[3, 11, 4],
[3, 12, 7],
[3, 13, 14],
[3, 14, 13],
[3, 15, 12],
[3, 16, 9],
[3, 17, 5],
[3, 18, 5],
[3, 19, 10],
[3, 20, 6],
[3, 21, 4],
[3, 22, 4],
[3, 23, 1],
[4, 0, 1],
[4, 1, 3],
[4, 2, 0],
[4, 3, 0],
[4, 4, 0],
[4, 5, 1],
[4, 6, 0],
[4, 7, 0],
[4, 8, 0],
[4, 9, 2],
[4, 10, 4],
[4, 11, 4],
[4, 12, 2],
[4, 13, 4],
[4, 14, 4],
[4, 15, 14],
[4, 16, 12],
[4, 17, 1],
[4, 18, 8],
[4, 19, 5],
[4, 20, 3],
[4, 21, 7],
[4, 22, 3],
[4, 23, 0],
[5, 0, 2],
[5, 1, 1],
[5, 2, 0],
[5, 3, 3],
[5, 4, 0],
[5, 5, 0],
[5, 6, 0],
[5, 7, 0],
[5, 8, 2],
[5, 9, 0],
[5, 10, 4],
[5, 11, 1],
[5, 12, 5],
[5, 13, 10],
[5, 14, 5],
[5, 15, 7],
[5, 16, 11],
[5, 17, 6],
[5, 18, 0],
[5, 19, 5],
[5, 20, 3],
[5, 21, 4],
[5, 22, 2],
[5, 23, 0],
[6, 0, 1],
[6, 1, 0],
[6, 2, 0],
[6, 3, 0],
[6, 4, 0],
[6, 5, 0],
[6, 6, 0],
[6, 7, 0],
[6, 8, 0],
[6, 9, 0],
[6, 10, 1],
[6, 11, 0],
[6, 12, 2],
[6, 13, 1],
[6, 14, 3],
[6, 15, 4],
[6, 16, 0],
[6, 17, 0],
[6, 18, 0],
[6, 19, 0],
[6, 20, 1],
[6, 21, 2],
[6, 22, 2],
[6, 23, 6],
]
data = [[d[1], d[0], d[2]] for d in data]
c = (
Bar3D(init_opts=opts.InitOpts(width="900px", height="500px"))
.add(
series_name="",
data=data,
xaxis3d_opts=opts.Axis3DOpts(type_="category", data=hours),
yaxis3d_opts=opts.Axis3DOpts(type_="category", data=days),
zaxis3d_opts=opts.Axis3DOpts(type_="value"),
)
.set_global_opts(
visualmap_opts=opts.VisualMapOpts(
max_=20,
range_color=[
"#313695",
"#4575b4",
"#74add1",
"#abd9e9",
"#e0f3f8",
"#ffffbf",
"#fee090",
"#fdae61",
"#f46d43",
"#d73027",
"#a50026",
],
)
)
)
return c
def bar3dStack()->Bar:
x_data = y_data = list(range(10))
def generate_data():
data = []
for j in range(10):
for k in range(10):
value = random.randint(0, 9)
data.append([j, k, value * 2 + 4])
return data
bar3d = Bar3D()
for _ in range(10):
bar3d.add(
"",
generate_data(),
shading="lambert",
xaxis3d_opts=opts.Axis3DOpts(data=x_data, type_="value"),
yaxis3d_opts=opts.Axis3DOpts(data=y_data, type_="value"),
zaxis3d_opts=opts.Axis3DOpts(type_="value"),
)
bar3d.set_global_opts(title_opts=opts.TitleOpts("Bar3D-堆叠柱状图示例"))
bar3d.set_series_opts(**{"stack": "stack"})
# bar3d.render("bar3d_stack.html")
return bar3d
# 上面的函数中不能render生成html,否则报错
# AttributeError: 'str' object has no attribute 'js_dependencies'
"""
page = (
Page(layout=Page.DraggablePageLayout,page_title="组合图布局展示",)
.add(
barBase(),
barBaseDictConfig(),
barBaseWithAnimation(),
barBaseWithCustomBackgroundImage(),
barBorderRadius(),
barChartDisplayDelay(),
barCustomBarColor(),
barDataZoomBoth(),
barDataZoomInside(),
barDataZoomSlider(),
barDataZoomSliderVertical(),
barDifferentSeriesGap(),
barGraphicComponent(),
barHistogram(),
barHistogramColor(),
barIsSelected(),
barMarklineCustom(),
barMarkLineType(),
barMarkPointCustom(),
barMarkPointType(),
barReversalAxis(),
barRotateXaxisLabel(),
barSameSeriesGap(),
barStack0(),
barStack1(),
barToolbox(),
barWaterFallPlot(),
barWithBrush(),
barXyaxisName(),
barYaxisFormatter(),
bar3dBase(),
bar3dPunchCard(),
bar3dStack()
)
)
page.render("page_bar_demo.html")
"""
Page.save_resize_html(source="page_bar_demo.html", # 上面的HTML文件名称
cfg_file="page_bar_demo.json", # 保存的json配置文件
dest="new_page_bar_demo.html" # 新HTML文件名称,可以空缺,默认resize_render.html
)
DraggablePageLayout 利用 Jquery 以及 Echarts 本身的 resize 功能,实现了可拖拽布局。使用步骤如下
1.指定 Page 布局
page = Page(layout=Page.DraggablePageLayout,page_title=“组合图布局展示”,)
2.正常 render 图表
page.add(bar_datazoom_slider(), line_markpoint(), pie_rosetype(), grid_mutil_yaxis())
page.render()
3.使用浏览器打开渲染后的 .html 文件,默认为 render.html。拖拉/调整图表位置和大小,当调整到一个适合的布局时,点击左上方的 Save Config
按钮,下载 chart_config.json 配置文件,假设存放位置为~/chart_config.json。再次渲染图表并指定其布局配置。
Warning: 请注释掉第一次的所有渲染代码,因为 html 已经生成,并不需要再重新渲染一遍。
render.html:第一步生成的原 html 文件
chart_config.json:第二步下载的配置文件
my_new_charts.html:新 html 文件路径
Page.save_resize_html("render.html",
cfg_file="~/chart_config.json",
dest="my_new_charts.html")
打开my_new_charts.html,某些浏览器可能不支持排版,显示仍为调整布局前的顺序图,使用Firefox打开显示正常。