from pyecharts import options as opts
from pyecharts.charts import Bar, Gauge, Pie, Page, Funnel, Geo, Scatter3D
import random
from pyecharts.faker import Faker
"""
柱状图
1、图表的函数都用代码写出来
"""
#柱状图
def bar(): # 柱状图
cate = ['1月', '2月', '3月', '4月', '5月', '6月','7月', '8月', '9月', '10月', '11月', '12月']
c = (
Bar()
.add_xaxis(cate)
.add_yaxis("计划流量数", [random.randint(100, 200) for _ in cate])
.add_yaxis("实际流量数", [random.randint(50, 100) for _ in cate])
.set_series_opts(
label_opts=opts.LabelOpts(is_show=True, color="#2CB34A")
)
.set_global_opts(title_opts=opts.TitleOpts(title="2021年流量趋势图",
title_textstyle_opts=opts.TextStyleOpts(color="#2CB34A"),
pos_left="5%"),
legend_opts=opts.LegendOpts(textstyle_opts=opts.TextStyleOpts(color="#2CB34A")),
xaxis_opts=opts.AxisOpts(axislabel_opts=opts.LabelOpts(color="#2CB34A")),
yaxis_opts=opts.AxisOpts(axislabel_opts=opts.LabelOpts(color="#2CB34A"))
)
.set_colors(["blue", "green"])
# .render("bar_stack0.html")
)
return c
#标题
def tab0(name, color): # 标题
c = (Pie().
set_global_opts(
title_opts=opts.TitleOpts(title=name, pos_left='center', pos_top='center',
title_textstyle_opts=opts.TextStyleOpts(color=color, font_size=20))))
return c
#标题
def tab1(name, color): # 标题
c = (Pie().
set_global_opts(
title_opts=opts.TitleOpts(title=name, pos_left='center', pos_top='center',
title_textstyle_opts=opts.TextStyleOpts(color=color, font_size=25))))
return c
#仪表图
def gau(): # 仪表图
c = (
Gauge(init_opts=opts.InitOpts(width="400px", height="400px"))
.add(series_name="流量利用率", data_pair=[["", 90]])
.set_global_opts(
legend_opts=opts.LegendOpts(is_show=False),
tooltip_opts=opts.TooltipOpts(is_show=True, formatter="{a} <br/>{b} : {c}%"),
)
# .render("gauge.html")
)
return c
#仪表图
def gau1(): # 仪表图
c = (
Gauge(init_opts=opts.InitOpts(width="400px", height="400px"))
.add(series_name="流量利用率", data_pair=[["", 90]])
.set_global_opts(
legend_opts=opts.LegendOpts(is_show=False),
tooltip_opts=opts.TooltipOpts(is_show=True, formatter="{a} <br/>{b} : {c}%"),
)
# .render("gauge.html")
)
return c
def radius():
cate = ['芦叶桥', '码头', '造纸厂', '钢厂', '春天小区', '特色餐饮区']
data = [153, 124, 107, 99, 89, 46]
c = Pie()
c.add('', [list(z) for z in zip(cate, data)],
radius=["30%", "75%"],
rosetype="radius")
c.set_global_opts(title_opts=opts.TitleOpts(title="水量销售额占比", padding=[1, 250],
title_textstyle_opts=opts.TextStyleOpts(color="#FFFFFF")),
legend_opts=opts.LegendOpts(textstyle_opts=opts.TextStyleOpts(color="#FFFFFF"), type_="scroll",
orient="vertical", pos_right="5%", pos_top="middle")
)
c.set_series_opts(label_opts=opts.LabelOpts(formatter="{b}: {d}%"))
c.set_colors(['red', "orange", "yellow", "green", "Cyan", "purple"])
return c
def funnel():
cate = ['访问客户', '长期客户', '新增客户', '主要客户', '核心客户']
data = [30398, 15230, 10045, 8109, 5698]
c = Funnel()
c.add("用户数", [list(z) for z in zip(cate, data)],
sort_='ascending',
label_opts=opts.LabelOpts(position="inside"))
c.set_global_opts(title_opts=opts.TitleOpts(title=""))
return c
def geo():
city_num = [('武汉', 105), ('成都', 70), ('北京', 99),
('西安', 80), ('杭州', 60), ('贵阳', 34),
('上海', 65), ('深圳', 54), ('乌鲁木齐', 76),
('哈尔滨', 47), ('兰州', 56), ('信阳', 85)]
start_end = [('宁波', '成都'), ('武汉', '北京'), ('武汉', '西安'),
('长沙', '杭州'), ('武汉', '贵阳'), ('武汉', '上海'),
('甘肃', '深圳'), ('北京', '乌鲁木齐'), ('上海', '哈尔滨'),
('武汉', '兰州'), ('西藏', '信阳')]
c = Geo()
c.add_schema(maptype='china',
itemstyle_opts=opts.ItemStyleOpts(color='#323c48', border_color='white'))
# 4.添加数据
c.add('', data_pair=city_num, color='white')
c.add('', data_pair=start_end, type_="lines", label_opts=opts.LabelOpts(is_show=False),
effect_opts=opts.EffectOpts(symbol="arrow",
color='gold',
symbol_size=7))
c.set_global_opts(
title_opts=opts.TitleOpts(title=""))
return c
def scatter3D():
# Scatter_data = [(random.randint(0, 50), random.randint(0, 50), random.randint(0, 50)) for i in range(50)]
data = [
[random.randint(0, 100), random.randint(0, 100), random.randint(0, 100)]
for _ in range(80)
]
c = (
Scatter3D()
.add("", data)
.set_global_opts(
title_opts=opts.TitleOpts("流量"),
visualmap_opts=opts.VisualMapOpts(range_color=Faker.visual_color),
)
)
return c
def scatter3D00():
Scatter_data = [(random.randint(0, 100), random.randint(0, 100), random.randint(0, 100)) for _ in range(100)]
range_color = ['#313695', '#4575b4', '#74add1', '#abd9e9', '#e0f3f8', '#ffffbf',
'#fee090', '#fdae61', '#f46d43', '#d73027', '#a50026']
# 配置 config
config_xAxis3D = "protein"
config_yAxis3D = "fiber"
config_zAxis3D = "sodium"
config_color = "fiber"
config_symbolSize = "vitaminc"
c = (
Scatter3D(init_opts=opts.InitOpts(width='900px', height='600px')) # 初始化
.add(
series_name="",
data=Scatter_data,
xaxis3d_opts=opts.Axis3DOpts(
name=config_xAxis3D,
type_="value",
# textstyle_opts=opts.TextStyleOpts(color="#fff"),
),
yaxis3d_opts=opts.Axis3DOpts(
name=config_yAxis3D,
type_="value",
# textstyle_opts=opts.TextStyleOpts(color="#fff"),
),
zaxis3d_opts=opts.Axis3DOpts(
name=config_zAxis3D,
type_="value",
# textstyle_opts=opts.TextStyleOpts(color="#fff"),
),
grid3d_opts=opts.Grid3DOpts(width=100, depth=100, rotate_speed=1, is_rotate=True),
)
.set_global_opts( # 设置全局配置项
title_opts=opts.TitleOpts(title="3D散点图"), # 添加标题
# visualmap_opts=opts.VisualMapOpts(
# # max_=100, # 最大值
# # pos_top=50, # visualMap 组件离容器上侧的距离
# range_color=Faker.visual_color # 颜色映射
visualmap_opts=[
opts.VisualMapOpts(
type_="color",
is_calculable=True,
dimension=3,
pos_top="50",
max_=200 / 2,
range_color=[
"#1710c0",
"#0b9df0",
"#00fea8",
"#00ff0d",
"#f5f811",
"#f09a09",
"#fe0300",
],
),
opts.VisualMapOpts(
type_="size",
is_calculable=True,
dimension=4,
pos_bottom="10",
max_=2.4 / 2,
range_size=[10, 40],
),
]
)
# .render("3D散点图.html")
)
return c
def scatter3D1():
# //Surface3D
Scatter_data = [(random.randint(0, 50), random.randint(0, 50), random.randint(0, 50)) for i in range(50)]
c = (
Scatter3D(init_opts=opts.InitOpts(
width='900px',
height='600px')) # 初始化
.add(series_name="",
data= Scatter_data,
xaxis3d_opts=opts.Axis3DOpts(type_="value"),
yaxis3d_opts=opts.Axis3DOpts(type_="value"),
grid3d_opts=opts.Grid3DOpts(
width=100, depth=100,rotate_sensitivity=1, rotate_speed=10, is_rotate=True
))
.set_series_opts(label_opts=opts.LabelOpts(is_show=False)) # 不显示标签(城市名)
# 设置全局配置项
.set_global_opts(
title_opts=opts.TitleOpts(title="水量图"), # 添加标题
visualmap_opts=opts.VisualMapOpts( # VisualMapOpts:视觉映射配置项
is_show = True, # 是否显示视觉映射配置
# 映射过渡类型,可选,"color", "size" (颜色映射还是大小映射)(重要!!!)
type_="color",
min_=0, # 指定 visualMapPiecewise 组件最小值
max_=50, # 指定 visualMapPiecewise 组件最大值。
range_text=['高', '低'],# 两端文本,['High', 'Low'],(自定义) range_text: Union[list, tuple] = None
# visualMap组件过渡颜色 (可自定义)(从淡到深) range_color: Union[Sequence[str]] = None,
# range_color=['#CCEBFF', '#22DDDD', '#0099FF', '#003D66'],# 或者range_color=['red', 'green'],
range_color=["#313695", "#4575b4","#74add1", "#abd9e9","#e0f3f8", "#ffffbf","#fee090","#fdae61","#f46d43","#d73027","#a50026",],
range_size=None,# visualMap 组件过渡 symbol 大小.range_size: Union[Sequence[int]] = None,
range_opacity=None,# visualMap 图元以及其附属物(如文字标签)透明度。range_opacity: Optional[Numeric] = None,
orient='horizontal',# visualMap组件,水平('horizontal')或竖直('vertical')。
pos_left='center',# visualMap 组件距容器左侧距离。# left =20像素或'20%'容器的%,或'left', 'center', 'right'组件自适应对齐。
pos_right=None,# visualMap 组件距容器右侧距离(同上)。
pos_top=50,# pos_top=None,# visualMap 组件离容器上侧距离(同上)。top=20或'20%'# 或'top', 'middle', 'bottom'。
pos_bottom=None,# visualMap 组件离容器下侧距离(同上)。
split_number=5,# 连续型数据,自动平均切分段。默认5段。连续数据范围需 max 和 min 指定
series_index=None,# 指定取哪个系列数据,默认所有系列。series_index: Union[Numeric, Sequence, None] = None,
dimension=None,# 组件映射维度Optional[Numeric]
is_calculable=True,# 是否显示拖拽用手柄(手柄能拖拽调整选中范围)。
is_piecewise=False,# 是否为分段型
is_inverse=True,# 是否反转 visualMap 组件(默认False)
pieces=None,# 自定义每一段范围,以及每段文字,以及每段特别样式。例如:
# pieces: [
# {"min": 1500}, // 不指定 max,表示 max 为无限大(Infinity)。
# {"min": 900, "max": 1500},
# {"min": 310, "max": 1000},
# {"min": 200, "max": 300},
# {"min": 10, "max": 200, "label": '10 到 200(自定义label)'},
# {"value": 123, "label": '123(自定义特殊颜色)', "color": 'grey'}, //表示 value 等于 123 的情况
# {"max": 5} // 不指定 min,表示 min 为无限大(-Infinity)。
# ]
out_of_range=None,# 定义:在选中范围外视觉元素。(用户可以和 visualMap 组件交互,用鼠标或触摸选择范围)
# 可选的视觉元素有:None
# symbol: 图元的图形类别。 # symbolSize: 图元的大小。# color: 图元的颜色。
# colorAlpha: 图元的颜色的透明度。 # opacity: 图元以及其附属物(如文字标签)的透明度。
# colorLightness: 颜色的明暗度,参见 HSL。 # colorSaturation: 颜色的饱和度,参见 HSL。
# colorHue: 颜色的色调,参见 HSL。
item_width=0,# 图形的宽度,即长条的宽度。
item_height=0,# 图形的高度,即长条的高度。
background_color='#CCCC33',# visualMap 组件的背景色。
border_color='#EE1111', # visualMap 组件的边框颜色。
border_width=2,# visualMap 边框线宽,单位px。
textstyle_opts=None,# 文字样式配置项,参考 `series_options.TextStyleOpts`
)
)
)
return c
#Page函数,所有图表拼接在一个页面中;
page = Page()#生命页面函数
page.add(
tab0("新兴铸管水务服务平台", "#2CB34A"),
bar(),
tab1("新兴智慧管件可视化大屏", "#2CB34A"),
gau(),
# gau1(),
radius(),
funnel(),
geo(),
scatter3D(),
)
page.render("datacenter.html")
# os.system("scatter.html")
from bs4 import BeautifulSoup
# 依据完成自己的草稿,实现布局---借用HTML(from bs4 import BeautifulSoup)
with open("datacenter.html", "r+", encoding='utf-8') as html:
html_bf = BeautifulSoup(html, 'lxml')
divs = html_bf.select('.chart-container')
# 相对于Part0的宽度、高度、位置、上边距、左边距定义,百分比以达到屏幕自适应
divs[0]["style"] = "width:10%;height:10%;position:absolute;top:0;left:2%;"#新兴铸管水务服务平台
divs[1]["style"] = "width:40%;height:40%;position:absolute;top:12%;left:0;"#柱状图
divs[2]["style"] = "width:35%;height:10%;position:absolute;top:2%;left:30%;"#可视化大屏
divs[3]["style"] = "width:30%;height:40%;position:absolute;top:10%;left:35%;"#仪表图
# divs[4]["style"] = "width:30%;height:40%;position:absolute;top:10%;left:28%;" # 仪表图
divs[4]["style"] = "width:40%;height:35%;position:absolute;top:12%;left:55%;"#radius环形扇
divs[5]["style"] = "width:30%;height:35%;position:absolute;top:60%;left:2%;"#梯形图
divs[6]["style"] = "width:60%;height:50%;position:absolute;top:45%;left:15%;"#中国地图
divs[7]["style"] = "width:35%;height:40%;position:absolute;top:50%;left:60%;"#三维散点图
body = html_bf.find("body")
body["style"] = "background-image: url(back2.jpg)" # 背景颜色
html_new = str(html_bf)
html.seek(0, 0)
html.truncate()
html.write(html_new)
python_pychart_geo
最新推荐文章于 2022-01-24 20:30:19 发布