pyechart库介绍及简单使用

一、概述

1.背景

数据可视化作为提高用户对数据的理解程度,创新架构,增进体验的重要一环,一向富有表现力的Python语言应当可以发挥更大作用,优秀的pyechart第三方库即在这样的背景下诞生。

2.介绍

Echarts是一个由百度开源的商业级数据图表,它是一个纯JavaScript的图表库,可以为用户提供直观生动,可交互,可高度个性化定制的数据可视化图表,赋予了用户对数据进行挖掘整合的能力。

我们即可定义:pyecharts库是一个用于生成 Echarts 图表的类库,,直接生成html图形,可以接入网站使用

3.安装

# 安装 v1 以上版本
$ pip install pyecharts -U

 

二、基本语法

1.柱形图绘制

from pyecharts import options as opts

from pyecharts.charts import Bar, Page

from pyecharts.globals import ThemeType
def bar_base_dict_config() -> Bar:
    c = (
        Bar({"theme": ThemeType.MACARONS})
        .add_xaxis(["吃喝", "杂物", "交通", "书费", "游玩", "花呗", "网购"])
        .add_yaxis("旁友A", [600, 20,30, 50, 100, 125, 200])
        .add_yaxis("旁友B", [650,25,25, 80, 150, 145, 100])
        .set_global_opts(
            title_opts={"text": "同学们的生活开支", "subtext": "通过 dict 进行配置"}
        )
    )
    return c
bar_base_dict_config().render()

 

2.折线图绘制

import pyecharts.options as opts
from pyecharts.charts import Line


def line_base() -> Line:
    attr = ["10.13", "10.14", "10.15", "10.16" , "10.17" , "\
    10.18"]
    v1 = [1650, 1700, 1461, 1350, 1100, 1500]
    v2 = [1020, 575, 400, 350, 330, 480]

    c = (
        Line()
        .add_xaxis(attr)
        .add_yaxis("成都fly北京", v1)
        .add_yaxis("成都fly昆明", v2)
        .set_global_opts(title_opts=opts.TitleOpts(title="航班价格折线图"))
    )
    return c
m=line_base()
m.render()

 

3.饼图绘制

from pyecharts import options as opts
from pyecharts.charts import Pie
from pyecharts.faker import Collector, Faker
def pie_set_colors() -> Pie:

    c = (

        Pie()

        .add("", [list(z) for z in zip(['上课','睡眠','餐饮','娱乐','聊天学习','健身'], [4,8,3,3,2,1])])

        .set_colors(["blue", "green", "yellow", "red", "pink","orange"])

        .set_global_opts(title_opts=opts.TitleOpts(title="这一天天的"))

        .set_series_opts(label_opts=opts.LabelOpts(formatter="{b}: {c}"))

    )

    return c
pie_set_colors().render()

 

 
####################################################################################
PyQt5的用法
##############################################################################

1.matplotlib+PyQt5实现图形

#coding=utf-8
#author='Shichao-Dong'

import sys
import random
import matplotlib

matplotlib.use("Qt5Agg")
from PyQt5 import QtCore
from PyQt5.QtWidgets import QApplication, QMainWindow, QVBoxLayout, QSizePolicy, QWidget
from numpy import arange, sin, pi
from matplotlib.backends.backend_qt5agg import FigureCanvasQTAgg as FigureCanvas
from matplotlib.backends.backend_qt5agg import NavigationToolbar2QT as NavigationToolbar
from matplotlib.figure import Figure
import matplotlib.pyplot as plt



class MyMplCanvas(FigureCanvas):
    """FigureCanvas的最终的父类其实是QWidget。"""

    def __init__(self, parent=None, width=5, height=4, dpi=100):

        # 配置中文显示
        plt.rcParams['font.family'] = ['SimHei']  # 用来正常显示中文标签
        plt.rcParams['axes.unicode_minus'] = False  # 用来正常显示负号

        self.fig = plt.figure(figsize=(width, height), dpi=dpi)  # 新建一个figure

        self.axes = self.fig.add_subplot(311)  # 建立一个子图,如果要建立复合图,可以在这里修改
        self.axes1 = self.fig.add_subplot(312)
        self.axes2 = self.fig.add_subplot(313)

        #self.axes.hold(False)  # 每次绘图的时候不保留上一次绘图的结果
        #self.axes1.hold(False)

        FigureCanvas.__init__(self, self.fig)
        self.setParent(parent)

        '''定义FigureCanvas的尺寸策略,这部分的意思是设置FigureCanvas,使之尽可能的向外填充空间。'''
        FigureCanvas.setSizePolicy(self,
                                   QSizePolicy.Expanding,
                                   QSizePolicy.Expanding)
        FigureCanvas.updateGeometry(self)

    '''绘制静态图,可以在这里定义自己的绘图逻辑'''

    def start_static_plot(self):

        self.fig.suptitle('性能监测图')

        self.axes.plot([562,269,562,256,431,651,328,385])
        self.axes.set_ylabel('mem占用:k')
        self.axes.grid(True)

        self.axes1.plot([0.9,16.5,12.3,25.6,31.86,18.5],'y')
        self.axes1.set_ylabel('cpu占用:%')
        self.axes1.grid(True)

        # flow = adb.getflow()
        self.axes2.plot([500,962,635,895],'b',[523,779,465,831],'r')
        self.axes2.set_ylabel('流量使用:k')
        self.axes2.set_xlabel('蓝色下载,红色上传')
        self.axes2.grid(True)

    '''启动绘制动态图'''

    def start_dynamic_plot(self, *args, **kwargs):
        timer = QtCore.QTimer(self)
        timer.timeout.connect(self.update_figure)  # 每隔一段时间就会触发一次update_figure函数。
        timer.start(1000)  # 触发的时间间隔为1秒。

    '''动态图的绘图逻辑可以在这里修改'''

    def update_figure(self):
        self.fig.suptitle('测试动态图')
        l = [random.randint(0, 10) for i in range(4)]
        self.axes.plot([0, 1, 2, 3], l, 'r')
        self.axes.set_ylabel('动态图:Y轴')
        self.axes.set_xlabel('动态图:X轴')
        self.axes.grid(True)
        self.draw()


class MatplotlibWidget(QWidget):
    def __init__(self, parent=None):
        super(MatplotlibWidget, self).__init__(parent)
        self.initUi()

    def initUi(self):
        self.layout = QVBoxLayout(self)
        self.mpl = MyMplCanvas(self, width=5, height=4, dpi=100)
        #self.mpl.start_static_plot() # 如果你想要初始化的时候就呈现静态图,请把这行注释去掉
        #self.mpl.start_dynamic_plot() # 如果你想要初始化的时候就呈现动态图,请把这行注释去掉
        self.mpl_ntb = NavigationToolbar(self.mpl, self)  # 添加完整的 toolbar

        self.layout.addWidget(self.mpl)
        # self.layout.addWidget(self.mpl_ntb)


if __name__ == '__main__':
    for i in range(10):
        app = QApplication(sys.argv)
        ui = MatplotlibWidget()
        ui.mpl.start_static_plot()  # 测试静态图效果
        #ui.mpl.start_dynamic_plot() # 测试动态图效果
        ui.show()
        sys.exit(app.exec_())

 



 相关链接:

https://blog.csdn.net/mr_songw/article/details/124238291 ........................................................matplotlib 绘制图形 ,,matplotilb使用

 

posted on 2022-04-25 13:39  chen_2987  阅读(989)  评论(0)    收藏  举报

导航