web实战基础(pycharts篇):pycharts基础知识(组合图形)

这是一篇非常非常基础的入门教程,但是也能让你深入了解pycharts的实现机制和带着你深入了解细节的设计,因此非常建议你能看完,相信一定会有所收获!
这一篇讲深入介绍组合图形的基础知识。
有四种类型,分别是:

(1)Grid:并行多图
(2)Page:顺序多图
(3)Tab:选项卡多图
(4)Timeline:时间线轮播多图

一、Grid:并行多图

(一)基本函数

class pyecharts.charts.Grid(Base)
class Grid(
    # 初始化配置项,参考 `global_options.InitOpts`
    init_opts: opts.InitOpts = opts.InitOpts()
)
func pyecharts.charts.Grid.add
def add(
    # 图表实例,仅 `RectChart` 类或者其子类
    chart: RectChart,

    # 直角坐标系网格配置项,参见 `GridOpts`
    grid_opts: Union[opts.GridOpts, dict],

    # 直角坐标系网格索引
    grid_index: int = 0,

    # 是否由自己控制 Axis 索引
    is_control_axis_index: bool = False,
)
GridOpts:直角坐标系网格配置项
class pyecharts.options.GridOpts
class GridOpts(
    # grid 组件离容器左侧的距离。
    # left 的值可以是像 20 这样的具体像素值,可以是像 '20%' 这样相对于容器高宽的百分比,
    # 也可以是 'left', 'center', 'right'。
    # 如果 left 的值为'left', 'center', 'right',组件会根据相应的位置自动对齐。
    pos_left: Optional[str] = None,

    # grid 组件离容器上侧的距离。
    # top 的值可以是像 20 这样的具体像素值,可以是像 '20%' 这样相对于容器高宽的百分比,
    # 也可以是 'top', 'middle', 'bottom'。
    # 如果 top 的值为'top', 'middle', 'bottom',组件会根据相应的位置自动对齐。
    pos_top: Optional[str] = None,

    # grid 组件离容器右侧的距离。
    # right 的值可以是像 20 这样的具体像素值,可以是像 '20%' 这样相对于容器高宽的百分比。
    pos_right: Optional[str] = None,

    # grid 组件离容器下侧的距离。
    # bottom 的值可以是像 20 这样的具体像素值,可以是像 '20%' 这样相对于容器高宽的百分比。
    pos_bottom: Optional[str] = None,
    # grid 组件的宽度。默认自适应。
    width: Union[Numeric, str, None] = None,
    # grid 组件的高度。默认自适应。
    height: Union[Numeric, str, None] = None,
    # grid 区域是否包含坐标轴的刻度标签。
    is_contain_label: bool = False,
)

(二)上下布局

from pyecharts.faker import Faker
from pyecharts import options as opts
from pyecharts.charts import Bar, Grid, Line,Scatter

def grid_vertical() -> Grid:
    bar = (
        Bar(init_opts=opts.InitOpts(bg_color='pink'))
        .add_xaxis(Faker.choose())
        .add_yaxis("商家A", Faker.values())
        .add_yaxis("商家B", Faker.values())
        .set_global_opts(title_opts=opts.TitleOpts(title="Grid-Bar"))
    )
    line = (
        Line()
        .add_xaxis(Faker.choose())
        .add_yaxis("商家A", Faker.values())
        .add_yaxis("商家B", Faker.values())
        .set_global_opts(
            title_opts=opts.TitleOpts(title="Grid-Line", pos_top="48%"),
            legend_opts=opts.LegendOpts(pos_top="48%"),
        )
    )
    grid = (
        Grid()
        .add(bar, grid_opts=opts.GridOpts(pos_bottom="60%"))
        .add(line, grid_opts=opts.GridOpts(pos_top="60%"))
    )
    return grid

grid1 = grid_vertical()
grid1.render("templates\index.html")

在这里插入图片描述

(三)左右布局

from pyecharts.faker import Faker
from pyecharts import options as opts
from pyecharts.charts import Bar, Grid, Line,Scatter


def grid_horizontal() -> Grid:
    scatter = (
        Scatter(init_opts=opts.InitOpts(bg_color='#ff8'))
        .add_xaxis(Faker.choose())
        .add_yaxis("商家A", Faker.values())
        .add_yaxis("商家B", Faker.values())
        .set_global_opts(
            title_opts=opts.TitleOpts(title="Grid-Scatter"),
            legend_opts=opts.LegendOpts(pos_left="20%"),
        )
    )
    line = (
        Line()
        .add_xaxis(Faker.choose())
        .add_yaxis("商家A", Faker.values())
        .add_yaxis("商家B", Faker.values())
        .set_global_opts(
            title_opts=opts.TitleOpts(title="Grid-Line", pos_right="5%"),
            legend_opts=opts.LegendOpts(pos_right="20%"),
        )
    )

    grid = (
        Grid()
        .add(scatter, grid_opts=opts.GridOpts(pos_left="55%"))
        .add(line, grid_opts=opts.GridOpts(pos_right="55%"))
    )
    return grid

grid1 = grid_horizontal()
grid1.render("templates\index.html")

在这里插入图片描述
可以发现,其实最主要的区别就在于设置了chant的位置。

# 左右布局
.add(scatter, grid_opts=opts.GridOpts(pos_left="55%"))
.add(line, grid_opts=opts.GridOpts(pos_right="55%"))
# 上下布局
.add(bar, grid_opts=opts.GridOpts(pos_bottom="60%"))
.add(line, grid_opts=opts.GridOpts(pos_top="60%"))

二、Page:顺序多图

基本函数如下:

def page_simple_layout():
    # page = Page()
    page = Page(layout=Page.SimplePageLayout)
    # page = Page(layout=Page.DraggablePageLayout)
    page.add(
        bar_datazoom_slider(),
        Pie_base(),
        table_base(),
    )
    page.render("templates\index.html")

完整的代码如下:

from pyecharts import options as opts
from pyecharts.charts import Bar,Page, Pie
from pyecharts.components import Table
from pyecharts.globals import ThemeType


def bar_datazoom_slider() -> Bar:
    bar = (
        Bar(init_opts=opts.InitOpts(theme=ThemeType.LIGHT))
        .add_xaxis(["衬衫", "羊毛衫", "雪纺衫", "裤子", "高跟鞋", "袜子"])
        .add_yaxis("商家A", [5, 20, 36, 10, 75, 90])
        .add_yaxis("商家B", [15, 25, 30, 18, 65, 70])
        .set_series_opts(
            label_opts=opts.LabelOpts(is_show=True),
            markline_opts=opts.MarkLineOpts(
                data=[opts.MarkLineItem(y=30, name="yAxis=30")],
                symbol_size=[20, 10],
                linestyle_opts=opts.LineStyleOpts(color='red', width=2)
            ),
        )
        .set_global_opts(
            title_opts=opts.TitleOpts(title="我的柱状图", subtitle="hello bar", pos_left=100),
        )
    )
    return bar

def Pie_base() -> Pie:
    x_data = ["高中", "大专", "本科", "硕士", "博士"]
    y_data = [335, 310, 274, 235, 400]

    bar = (
        Pie(init_opts=opts.InitOpts(page_title='我的饼图', bg_color='pink', width="500px", height="400px"))
        .add(
            series_name="学历",
            data_pair=[list(z) for z in zip(x_data, y_data)],
            center=["50%", "50%"],
        )
        .set_colors(["blue", "green", "yellow", "red", "orange"])
        .set_global_opts(
            title_opts=opts.TitleOpts(title="我的饼图", pos_left='center',
                                      title_textstyle_opts=opts.TextStyleOpts(color="#ff0")),
            legend_opts=opts.LegendOpts(pos_left="left", orient="vertical", pos_top="10%"),
        )
        .set_series_opts(
            label_opts=opts.LabelOpts(formatter="{b}:{c}")
        )
    )
    return bar

def table_base() -> Table:
    table = Table()
    headers = ["姓名", "年龄", "性别"]
    rows = [["张三", 25, '男'],
            ["李四", 35, '男'],
            ["王五", 22, '男'],
            ]
    table.add(headers, rows)
    table.set_global_opts(
        title_opts=opts.ComponentTitleOpts(title="我的表格", subtitle="我是副标题")
    )
    return table


def page_simple_layout():
    # page = Page()
    page = Page(layout=Page.SimplePageLayout)
    # page = Page(layout=Page.DraggablePageLayout)
    page.add(
        bar_datazoom_slider(),
        Pie_base(),
        table_base(),
    )
    page.render("templates\index.html")


if __name__ == "__main__":
    page_simple_layout()

在这里插入图片描述

三、Tab:选项卡多图

(一)基本函数

class pyecharts.charts.Tab
class Tab(
    # HTML 标题
    page_title: str = "Awesome-pyecharts",

    # 远程 HOST,默认为 "https://assets.pyecharts.org/assets/"
    js_host: str = ""
)
func pyecharts.charts.Tab.add
def add(
    # 任意图表类型
    chart,

    # 标签名称
    tab_name
):

(二)案例

from pyecharts import options as opts
from pyecharts.charts import Bar, Grid, Line, Pie, Tab
from pyecharts.faker import Faker

def bar_datazoom_slider() -> 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 line_markpoint() -> Line:
    c = (
        Line()
        .add_xaxis(Faker.choose())
        .add_yaxis(
            "商家A",
            Faker.values(),
            markpoint_opts=opts.MarkPointOpts(data=[opts.MarkPointItem(type_="min")]),
        )
        .add_yaxis(
            "商家B",
            Faker.values(),
            markpoint_opts=opts.MarkPointOpts(data=[opts.MarkPointItem(type_="max")]),
        )
        .set_global_opts(title_opts=opts.TitleOpts(title="Line-MarkPoint"))
    )
    return c


def pie_rosetype() -> Pie:
    v = Faker.choose()
    c = (
        Pie()
        .add(
            "",
            [list(z) for z in zip(v, Faker.values())],
            radius=["30%", "75%"],
            center=["25%", "50%"],
            rosetype="radius",
            label_opts=opts.LabelOpts(is_show=False),
        )
        .add(
            "",
            [list(z) for z in zip(v, Faker.values())],
            radius=["30%", "75%"],
            center=["75%", "50%"],
            rosetype="area",
        )
        .set_global_opts(title_opts=opts.TitleOpts(title="Pie-玫瑰图示例"))
    )
    return c


def grid_mutil_yaxis() -> Grid:
    x_data = ["{}月".format(i) for i in range(1, 13)]
    bar = (
        Bar()
        .add_xaxis(x_data)
        .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",
        )
        .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="Grid-多 Y 轴示例"),
            tooltip_opts=opts.TooltipOpts(trigger="axis", axis_pointer_type="cross"),
        )
    )

    line = (
        Line()
        .add_xaxis(x_data)
        .add_yaxis(
            "平均温度",
            [2.0, 2.2, 3.3, 4.5, 6.3, 10.2, 20.3, 23.4, 23.0, 16.5, 12.0, 6.2],
            yaxis_index=2,
            color="#675bba",
            label_opts=opts.LabelOpts(is_show=False),
        )
    )

    bar.overlap(line)
    return Grid().add(
        bar, opts.GridOpts(pos_left="5%", pos_right="20%"), is_control_axis_index=True
    )


tab = Tab()
tab.add(bar_datazoom_slider(), "bar-example")
tab.add(line_markpoint(), "line-example")
tab.add(pie_rosetype(), "pie-example")
tab.add(grid_mutil_yaxis(), "grid-example")
tab.render("templates\index.html")

(三)运行效果

在这里插入图片描述

四、Timeline:时间线轮播多图

(一)基本函数

func pyecharts.charts.Timeline.add
def add(
    # 图表实例
    chart: Base, 
    # 时间点
    time_point: str
)

(二)Bar图 Timeline 效果

from pyecharts import options as opts
from pyecharts.charts import Bar, Grid, Line, Liquid, Page, Pie,Timeline
from pyecharts.faker import Faker

def timeline_pie() -> Timeline:
    attr = Faker.choose()
    tl = Timeline()
    for i in range(2015, 2020):
        pie = (
            Pie()
            .add(
                "商家A",
                [list(z) for z in zip(attr, Faker.values())],
                center=["50%","50%"]
            )
        )
        tl.add(pie, "{}年".format(i))
    return tl

t = timeline_pie()
t.render('templates\index.html')

在这里插入图片描述

(三)Pie 图 Timeline 效果

from pyecharts.faker import Faker
from pyecharts import options as opts
from pyecharts.charts import Bar, Page, Pie, Timeline


def timeline_bar() -> Timeline:
    x = Faker.choose()
    tl = Timeline()
    for i in range(2015, 2020):
        bar = (
            Bar()
            .add_xaxis(x)
            .add_yaxis("商家A", Faker.values())
            .set_global_opts(title_opts=opts.TitleOpts("某商店{}年营业额".format(i)))
        )
        tl.add(bar, "{}年".format(i))
    return tl

t = timeline_bar()
t.render('templates\index.html')

在这里插入图片描述

OK,终于写完了,后续我将会继续介绍Flask与pycharts结合的实现方式,敬请期待。

感谢你的关注!

参考:https://pyecharts.org/#/zh-cn/intro

  • 2
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 宿舍管理系统是一种针对大学、学校里的宿舍管理而开发的系统。对于大学来说,宿舍管理系统可以帮助学校方便地管理学生宿舍信息、入住信息、设备管理以及一些其他相关功能。 首先,宿舍管理系统需要有一个用户登录界面,可以区分管理员和学生用户。管理员拥有对系统的全部权限,可以添加、删除、修改学生宿舍信息,管理宿舍房间以及设备的分配。而学生用户能够查看自己的宿舍信息,申请更换宿舍,反馈宿舍设备问题等。 宿舍管理系统还需要一个信息管理模块,用于管理宿舍楼、宿舍房间和设备等信息。管理员可以对宿舍楼进行分配、调整,对宿舍房间进行分配、调整,并且可以对设备进行添加、修改和删除等操作。 另外,宿舍管理系统还需要一个入住管理模块,用于管理学生的入住信息。管理员可以添加学生的入住信息,包括学生的基本信息、宿舍楼、宿舍房间等信息,还可以对学生的入住情况进行统计和查询。 宿舍管理系统还需要一个设备管理模块,用于管理宿舍设备的分配和维修。管理员可以对设备进行添加、修改和删除,还可以记录设备的维修情况和维修人员等信息。 总结来说,宿舍管理系统通过提供一个方便、高效的管理平台,可以帮助学校方便地管理学生宿舍信息、入住信息、设备管理等功能。对于大学来说,宿舍管理系统是提升宿舍管理效率、提供更好的宿舍服务的重要工具。而在实际开发过程中,Java Web开发实战经典基础中的知识和技术将会对宿舍管理系统的开发起到重要的指导作用。 ### 回答2: 宿舍管理系统是一个用于管理学生宿舍信息的系统,可以实现宿舍分配、入住管理、费用管理、报修管理等功能。 Java Web开发实战经典基础是一本教授Java Web开发的经典教材,其中包含了Java Web开发的基础知识、技术和案例分析。通过学习这本教材,读者可以掌握Java Web开发的基本概念和流程,了解Java Web应用的开发框架和工具,能够独立完成简单的Java Web项目开发。 宿舍管理系统的开发可以借助Java Web开发实战经典基础提供的知识和案例进行。首先,我们可以使用Java Web开发中的MVC模式对系统进行设计和实现。MVC模式将系统分为Model、View和Controller三个层次,分别负责处理数据逻辑、展示和用户交互。 在宿舍管理系统中,Model层负责数据库的操作和管理,包括学生和宿舍的信息存储和查询;View层负责系统的界面展示,包括宿舍列表、学生信息和费用情况等;Controller层负责处理用户的请求和逻辑处理,包括学生入住申请、费用缴纳和报修处理等操作。 在开发过程中,可以使用Java Web开发实战经典基础提供的技术和工具来辅助开发。例如,可以使用Java的JSP和Servlet技术来实现系统的界面和请求处理;可以使用Java的JDBC技术来操作数据库;可以使用HTML和CSS来设计和美化系统的界面。 总之,通过学习和应用Java Web开发实战经典基础中的知识,我们可以开发出一个功能完善的宿舍管理系统。这个系统不仅可以提高宿舍管理的效率,还可以提供学生入住和居住质量的监管,为学校和学生提供便利。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值