python_pychart_geo

在这里插入图片描述

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)
  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值