精华内容
下载资源
问答
  • python 动态绘图

    2020-06-05 19:52:06
    import numpy as np import matplotlib.pyplot as plt from scipy.optimize import least_squares plt.ion(); # 开启interactive mode 成功的关键函数 fig = plt.figure(1); def func1(p,x): ...

    记录一下动图绘制方法

    
    import numpy as np
    import matplotlib.pyplot as plt
    from scipy.optimize import least_squares
    
    plt.ion();  # 开启interactive mode 成功的关键函数
    fig = plt.figure(1);
    
    
    def func1(p,x):
        #print(p)
        return p[0]+p[1]*x+p[1]*x*x
    
    
    def func(p,x):
        #print(p)
        y = func1(p,x)
        plt.cla()
        plt.scatter(x,y)
        plt.ylim(-1,80)
        plt.pause(0.2)
        #print(y)
    
        return p[0]+p[1]*x+p[1]*x*x
    
    def error(p,x,y):
        return func(p,x)-y
    
    p = [1,1,1]
    x = np.arange(10)
    y = [0,1,5,2,6,7,5,9,10,2]
    
    
    para = least_squares(error,  # 误差函数
                            p,  # 初始参数
                            args=(x, y)  # 实验值,真实值
                            #bounds=(pl, pr)
                            )  # 边界参数
    
    
    print(para)
    
    plt.ioff()
    plt.show()
    
    展开全文
  • Python动态绘图

    2021-05-10 16:10:12
    Python的绘图方式包括“控制台绘图”和“弹出窗绘图”,动态绘图只能在弹出窗中进行,因此在绘图前必须进行设置。 案例1: import numpy as np import matplotlib.pyplot as plt #%matplotlib auto #Jupyter ...

    Python的绘图方式包括“控制台绘图”和“弹出窗绘图”,动态绘图只能在弹出窗中进行,因此在绘图前必须进行设置。

    案例1:

    import numpy as np
    import matplotlib.pyplot as plt
    
    #%matplotlib auto #Jupyter notebook的弹出窗绘图语句,在Pycharm和Spyder中国必须删除该句
    
    for i in range(10):
    #     plt.figure() #绘制一个figure,标号基于前一个figure以自然数命名
    #     plt.figure(i) #以指定数据作为标号绘制一个figure
        plt.plot(np.random.randn(10,10)) #在当前figure中绘图,如果没有figure则自己新建一个再绘图
        plt.pause(0.2) #暂停时间
        plt.cla() #将当前figure中绘图区的内容清除
    #     plt.close() #将当前figure关闭
    

    案例2:指定figure画图

    import matplotlib.pyplot as plt
    
    #%matplotlib auto #Jupyter notebook的弹出窗绘图语句,在Pycharm和Spyder中国必须删除该句
    
    fig,ax=plt.subplots()
    y1=[]
    for i in range(50):
        y1.append(i)
        ax.cla()
        ax.bar(y1,label='test',height=y1,width=0.3)
        ax.legend()
        plt.pause(0.3)
    

    注意:要实现动态绘图,plt.pause()是必须要的,否则图像不会展示(因为显示图像需要的时间比较长)!

    python保存gif图像:https://blog.csdn.net/briblue/article/details/84940997

    展开全文
  • Python动态绘图的方法(matplotlib,matplotlib.animation,pyechart,echart) 目录 方法一:matplotlib循环添加数据 1 方法二:matplotlib循环刷新-清除旧数据-添加新数据 1 方法三、利用第三方插件imagemagick...

    Python动态绘图的方法(matplotlib,matplotlib.animation,pyechart,echart

    目录

    方法一:matplotlib循环添加数据 1

    方法二:matplotlib循环刷新-清除旧数据-添加新数据 1

    方法三、利用第三方插件imagemagick实现动态图保存gif文件 2

    方法四:利用pyecharts实现图展示-保存为html 3

    方法五:利用flask和pyechart组合-web发布图形 4

    方法六:利用flask发布静态echart的html网页 7

    方法七:利用flask+ajax+echart+json发布异步图形网页 8

    方法八:flask+ajax+echart+json+mysql的自动刷新网页展示数据库数据 11

     

     

     

    方法一:matplotlib循环添加数据

    import numpy as np
    import matplotlib.pyplot as plt
    """
    动态绘图方法一:
    通过刷新图面的方法,每次循环在绘制新图画前,把当前绘图区的内容进行清空,
    然后绘制新的图形
    """
    fig=plt.figure()  #设置图面大小
    plt1=plt.subplot(211) #设置绘图区域2行1列,第一个图区
    plt2=plt.subplot(212)#设置绘图区域2行1列,第二个图区
    plt1.axis([0, 100, 0, 1])
    xa=[]
    ya = []
    pause_time=0.01  #动态刷新时间
    for i in range(50):
        y = np.random.random()
        ya.append(y)  # 每迭代一次,将i放入y1中画出来
        xa.append(i)
        plt1.cla()   # 清除键
        plt1.plot(xa,ya)
        plt.pause(pause_time)

     

    方法二:matplotlib循环刷新-清除旧数据-添加新数据

    """
    利用绘图的特性,每次绘制的内容,在前一次的结果上添加,
    这个方法需要对数据进行特殊处理,每次绘制的数据,只有新添加的数据,旧的数据需要删除
    """
    plt2.axis([0, 100, 0, 1])
    xs = [0, 0]
    ys = [1, 1]
    for i in range(50):
        y = np.random.random()
        xs[0] = xs[1]
        ys[0] = ys[1]
        xs[1] = i
        ys[1] = y
        plt2.plot(xs, ys)
        plt.pause(pause_time)
    plt.show()

     

     

    方法三、利用第三方插件imagemagick实现动态图保存gif文件

    1. 首先现在imagemagick软件,这里有个坑,需要下载6.9版本的,应为7.0版本没有了convert.exe命令,必须用6.9版本的,网上的教程都是用的这个convert命令
    2. 安装完,imagemagick后,matplotlib并不知道这个命令所在的位置,因此需要告诉命令convert的绝对位置

    在python中利用print(matplotlib.matplotlib_fname()),获得matplotlib配置文件的位置,在最后一行,修改命令的全局路径

    ,为animation.convert_path: D:\Program Files\ImageMagick-6.9.10-Q16\convert.exe

    1. 在程序中就可以正常使用了

    import numpy as np
    import matplotlib
    import matplotlib.pyplot as plt
    import matplotlib.animation as animation
    print(matplotlib.matplotlib_fname())  # 修改matplotlib配置文件的位置
    fig = plt.figure()  # 画纸
    ax = plt.subplot()  # 绘图区
    xdata, ydata = [], []  # x,y轴数据数组
    ln, = plt.plot([], [], 'r', animated=True)  #
    def init():
        ax.set_xlim(0, 100)
        ax.set_ylim(0, 1)
        return ln,
    def update(frame):  #frame的数据来自FuncAnimation函数frams的内容,每次调用函数,区frames中的一个数据
        xdata.append(frame)
        # print(frame)
        ydata.append(np.random.random())
        ln.set_data(xdata, ydata)  #在ln中添加数据
        return ln,
    anim = animation.FuncAnimation(fig, update, frames=range(10,60), interval=10, init_func=init, blit=True, repeat=False)
    # anim.save('sinx.gif', writer='imagemagick')  #存储为gif文件
    # anim.save('sinx2.html')  #利用默认的工具,存储为html文件
    plt.show()

     

    方法四:利用pyecharts实现图展示-保存为html

    1. 利用echart进行实现,利用网页形式,在web前端显示图形,让后利用echart获得后台的数据
    2. 需要工具,echart,flask
    3. pip install echarts
    4. 保存为gif
    • 1.如果想直接将图片保存为 png, pdf, gif 格式的文件,可以使用 pyecharts-snapshot。使用该插件请确保你的系统上已经安装了 Nodejs 环境。
    • 安装 phantomjs $ npm install -g phantomjs-prebuilt
    • 安装 pyecharts-snapshot $ pip install pyecharts-snapshot
    • 调用 render 方法 bar.render(path='snapshot.png') 文件结尾可以为 svg/jpeg/png/pdf/gif。请注意,svg 文件需要你在初始化 bar 的时候设置 renderer='svg'
    1.  

    首先利用pyecharts画一个静态的图形

    #http://pyecharts.org/#/zh-cn/prepare 帮助文件
    from pyecharts import Line
    import numpy as np
    x=list(range(0,50))
    y1=list(np.random.random(50))
    y2=list(np.random.random(50))
    y2=[m/2 for m in y2 if m>0] #for的迭代式式,加过滤器if,生产list

    line=Line("折线图")
    line.add("A",x,y1,mark_point=["average"],line_width=3,line_color="red")

    line.add("B",x,y2,mark_point=["average"],line_width=3,line_color="blue")

    #line.show_config()
    line.render("myechart001.html")  #生成html文件

    import webbrowser
    webbrowser.open("myechart001.html")  #

    方法五:利用flask和pyechart组合-web发布图形

    • 首先要安装flask框架
    • 在windows的命令行执行:python -m venv myenv
    • 进入虚拟环境命令的脚本文件夹,激活虚拟环境
    • 然后安装flask包

    • 建立html模板目录结构

    两个文件的代码如下

    python程序如下

    import random

    from pyecharts import Scatter3D

    from flask import Flask, render_template

    app = Flask(__name__)

    REMOTE_HOST = "https://pyecharts.github.io/assets/js"

    @app.route("/")

    def hello():

        s3d = scatter3d()

        return render_template(

            "pyecharts.html",

            myechart=s3d.render_embed(),

            host=REMOTE_HOST,

            script_list=s3d.get_js_dependencies(),

        )

     

     

    def scatter3d():

        data = [generate_3d_random_point() for _ in range(80)]

        range_color = [

            "#313695",

            "#4575b4",

            "#74add1",

            "#abd9e9",

            "#e0f3f8",

            "#fee090",

            "#fdae61",

            "#f46d43",

            "#d73027",

            "#a50026",

        ]

        scatter3D = Scatter3D("3D scattering plot demo", width=1200, height=600)

        scatter3D.add("", data, is_visualmap=True, visual_range_color=range_color)

        return scatter3D

     

     

    def generate_3d_random_point():

        return [

            random.randint(0, 100), random.randint(0, 100), random.randint(0, 100)

        ]

     

    if __name__=='__main__':

    app.run(debug=True)

     

    html文件的内容如下

    <!DOCTYPE html>

    <html>

     

    <head>

        <meta charset="utf-8">

        <title>Proudly presented by ECharts</title>

        {% for jsfile_name in script_list %}

            <script src="{{ host }}/{{ jsfile_name }}.js"></script>

        {% endfor %}

    </head>

     

    <body>

      {{ myechart|safe }}

    </body>

     

    </html>

    • 在pycharm中运行server.py文件,在浏览器中访问127.0.0.1:5000即可

     

    这是官方的例子。

     

    在此基础上修改为折线图

    from pyecharts import Line  #引入不同的图形模块

    from flask import Flask, render_template

    import numpy as np

     

    app = Flask(__name__)

    REMOTE_HOST = "https://pyecharts.github.io/assets/js"  #远程js库,可以下载全部到自己的服务器上,修改这个路径就可以了

    @app.route("/")

    def hello():

        myline=mydata_line()  #这个地方就是基本的pyechart图形绘制,返回一个图形对象

        return render_template(

            "pyecharts.html",  #模板的名称,模板默认位置在templates文件夹下

            myechart=myline.render_embed(), #给模板传递echart图形参数

            host=REMOTE_HOST,  #js库的位置

            script_list=myline.get_js_dependencies(), #给模块传echart图形的js代码,我理解的,不一定对

        )

     #此函数就是普通的画图函数,数据怎么处理都可以,利用基本知识

    def mydata_line():

        x=list(range(50))

        y1=list(np.random.random(50))

        y2=list(np.random.random(50))

        line=Line("折线图flask")

        line.add("A",x,y1)

        line.add("B",x,y2)

        #line.render("myechart001.html")  # 生成html文件,这是静态方法生成网页

        return line

     

    if __name__=='__main__':

        app.run(debug=True)

     

    html文件的内容不变,还利用官方例子的内容。

    这种方法,比较简单可以快速的发布html格式的网页,但是问题是html网页的内容比较单一,需要根据需求进行修改,但是应用的案例比较少,属于小众方法。

    主要问题:没有方法实现动态刷新图形图形的方法,图形都是利用已知的数据,生成静态的html网页进行发布,因此不适用动态刷新的方法

    扩展思路,直接利用底层得echart进行数据展示

     

    方法六:利用flask发布静态echart的html网页

    思路:利用flask发布静态网页,但是html网页是echart的网页,需要js渲染,因此需要jinjia2库支持,渲染网页。这里需要主要flask的默认文件夹结构,pro/static,pro/templates,pro/,分别方法JS/CSS/IMAGE,html,py程序

    #python文件内容

    from flask import Blueprint,render_template,send_file

    from flask import Flask

    app = Flask(__name__)

    @app.route('/')

    def index():

        return render_template('pyecharts2_1.html') #调用模板

    if __name__=='__main__':

    app.run(debug=True)

    html文件内容,修改了官方的例子,把js文件的位置,写为了绝对路径,不要跟html文件在一个目录里面

    <!DOCTYPE html>

    <html>

    <head>

        <meta charset="utf-8">

        <title>ECharts</title>

        <!-- 引入 echarts.js -->

        <script src="/static/echarts.min.js"></script>

    </head>

    <body>

    <font  face="黑体" color="red">文字的字体和颜色</font>

        <!-- 为ECharts准备一个具备大小(宽高)的Dom -->

        <div id="main" style="width: 600px;height:400px;"></div>

     

        <script type="text/javascript">

            // 基于准备好的dom,初始化echarts实例

            var myChart = echarts.init(document.getElementById('main'));

     

            // 指定图表的配置项和数据

            var option = {

                title: {

                    text: 'ECharts 入门示例'

                },

                tooltip: {},

                legend: {

                    data:['销量']

                },

                xAxis: {

                    data: ["衬衫","羊毛衫","雪纺衫","裤子","高跟鞋","袜子"]

                },

                yAxis: {},

                series: [{

                    name: '销量',

                    type: 'bar',

                    data: [5, 20, 36, 10, 10, 20]

                }]

            };

     

            // 使用刚指定的配置项和数据显示图表。

            myChart.setOption(option);

        </script>

    </body>

    </html>

     

    方法七:利用flask+ajax+echart+json发布异步图形网页

    思路:静态方法,echart的html网页的数据是写死的,因此需要修改网页的数据内容,利用echart的js库提供的接口功能,经过搜索,考虑使用ajax+Jason的方法。用户首先访问网页/,获得模板html,但是模板里面只有js的脚本,没有数据,因此再次利用ajax访问/test,获得json数据,然后把json数据利用js进行解析,添加到html网页中进行显示。如果需要动态刷新,在html中添加js的定时器函数,利用间隔时间发送ajax请求数据,刷新页面

    参考:轮询和长轮询https://blog.csdn.net/submarineas/article/details/84176840

    #python程序

    from flask import Flask,render_template,url_for

    import json

    import numpy as np

    app = Flask(__name__)

    @app.route('/')

    def hello():

        return render_template('my_template.html')

    # /test路由 接收前端的ajax请求

    @app.route('/test',methods=['POST'])

    def my_echart():

        xdays = list(range(0, 50))

        yvalues1 = list(np.random.random(50))

        yvalues2= list(np.random.random(50))

        # 转换成JSON数据格式

        jsonData = {} #准备存储json数据的字典

        jsonData['xdays']=xdays

        jsonData['yvalues1'] = yvalues1

        jsonData['yvalues2'] = yvalues2

        # json.dumps()用于将dict类型的数据转成str,因为如果直接将dict类型的数据写入json会发生报错,因此将数据写入时需要用到该函数。

        j = json.dumps(jsonData)

        # 在浏览器上渲染my_template.html模板(为了查看输出的数据)

        return(j)

    if __name__ == '__main__':

        app.run(debug=True)

    #html模板

    <!DOCTYPE html>

    <html>

    <head>

        <meta charset="utf-8">

        <title>炫酷的ECharts</title>

        <script src="http://libs.baidu.com/jquery/1.7.2/jquery.min.js"></script>

        <script src="https://cdn.bootcss.com/echarts/4.1.0.rc2/echarts.min.js"></script>

    </head>

     

    <body>

    <font  face="黑体" color="red">my_template</font>

    <!-- 为ECharts准备一个具备大小(宽高)的Dom -->

    <div id="main" style="width: 800px;height:500px;margin: 0 auto;"></div>

    <script type="text/javascript">

        var myChart = echarts.init(document.getElementById('main'));

        var app = {

            xday:[],

            yvalue1:[],

            yvalue2:[]

        };

        // 发送ajax请求,从后台获取json数据

        $(document).ready(function () {

           getData();

           console.log(app.xday);

           console.log(app.yvalue1);

           console.log(app.yvalue2)

        });

        function getData() {

             $.ajax({

                url:'/test',

                data:{},

                type:'POST',

                async:false,

                dataType:'json',

                success:function(data) {

                    app.xday = data.xdays;

                    app.yvalue1 = data.yvalues1;

                    app.yvalue2 = data.yvalues2;

                    myChart.setOption({

                        title: {

                            text: '异步数据加载示例'

                        },

                        tooltip: {},

                        legend: {

                            data:['销量1','销量2']

                        },

                        xAxis: {

                            data: app.xday

                        },

                        yAxis: {},

                        series: [{

                            name: '销量1',

                            type: 'line', //echart的图形类型'bar'

                            data: app.yvalue1

                        },

                            {

                            name: '销量2',

                            type: 'line', //echart的图形类型'bar'

                            data: app.yvalue2

                        }

     

                        ]

                    })

                },

                error:function (msg) {

                    console.log(msg);

                    alert('系统发生错误');

                }

            })

    };

    setInterval(getData,3000); //很关键的,自动轮寻,3秒一次,动态刷新

     

    </script>

    </body>

    </html>

     

    方法八:flask+ajax+echart+json+mysql的自动刷新网页展示数据库数据

    参考:轮询和长轮询https://blog.csdn.net/submarineas/article/details/84176840

    Sql参考https://blog.csdn.net/u014465934/article/details/80556340

     

    1. 先连接mysql数据库
    2. 从数据库读取数据,元祖形式。然后填充到图形中
    3. 其它内容,跟前面一样,利用定时器html动态刷新界面,获得后台最新的mysql的数据。

    #python程序

    #coding:utf-8

    from flask import Flask,render_template,url_for

    import pymysql

    import json

    # 生成Flask实例

    app = Flask(__name__)

    @app.route('/')

    def hello():

        return render_template('my_template.html')

    # /test路由 接收前端的ajax请求

    @app.route('/test',methods=['POST'])

    def my_echart():

        # 连接数据库

        conn = pymysql.connect(host='127.0.0.1',user='root',password='123456',db='mydb001')

        cur = conn.cursor()

        sql = 'SELECT * FROM tb1'

        cur.execute(sql)

        u = cur.fetchall()

        # 转换成JSON数据格式

        jsonData = {}

        xdays = []

        yvalues1 = []

        yvalues2 = []

        for data in u:

            # xdays.append(str(data[0]))

            xdays.append(data[0])

            yvalues1.append(data[1])

            yvalues2.append(data[2])

     

        print(xdays,yvalues1,yvalues2)

     

        jsonData['xdays']=xdays

        jsonData['yvalues1'] = yvalues1

        jsonData['yvalues2'] = yvalues2

        # json.dumps()用于将dict类型的数据转成str,因为如果直接将dict类型的数据写入json会发生报错,因此将数据写入时需要用到该函数。

        j = json.dumps(jsonData)

        cur.close()

        conn.close()

        # 在浏览器上渲染my_template.html模板(为了查看输出的数据)

        return(j)

    if __name__ == '__main__':

        # 运行项目

    app.run(debug=True)

     

    Html程序跟前面程序一样,不变

     

    程序下载:链接:https://pan.baidu.com/s/1xeLlOHtDKhgBf5qQCJoh0Q

    提取码:wvam

     

    展开全文
  • python matplotlib 绘图

    2021-03-21 14:19:32
    python matplotlib 绘图。散点图、折线图、柱状图、直方图、图像属性(颜色,数据标记属性、线性属性)、子图、三维曲线图、三维散点图、三维曲面图、动态图。

    1.散点图

    import numpy as np
    import matplotlib.pyplot as plt
    from pylab import *
    mpl.rcParams['font.sans-serif'] = ['SimHei']#正常显示字体
    mpl.rcParams['axes.unicode_minus'] = False#正常显示图像中的负号
    
    x=np.random.randint(low=2,high=10,size=10)
    y=np.random.randint(low=2,high=10,size=10)
    plt.scatter(x,y)
    plt.title('散点图')
    plt.xlabel('x')
    plt.ylabel('y')
    plt.show()
    

    2.折线图

    import numpy as np
    import matplotlib.pyplot as plt
    from pylab import *
    mpl.rcParams['font.sans-serif'] = ['SimHei']
    mpl.rcParams['axes.unicode_minus'] = False
    
    x=np.linspace(start=0,stop=30,num=300)
    y=np.sin(x)
    plt.plot(x,y)
    plt.title('折线图')
    plt.xlabel('x')
    plt.ylabel('y')
    plt.show()
    

    3.柱状图
    更多柱状图
    python画柱状图并数值显示

    import numpy as np
    import matplotlib.pyplot as plt
    from pylab import *
    mpl.rcParams['font.sans-serif'] = ['SimHei']
    mpl.rcParams['axes.unicode_minus'] = False
    
    x=['a','b','c','d']
    y=[3,5,7,9]
    plt.bar(x,y,width=0.5)
    plt.title('柱状图')
    plt.xlabel('x')
    plt.ylabel('y')
    plt.show()
    

    4.直方图

    import numpy as np
    import matplotlib.pyplot as plt
    from pylab import *
    mpl.rcParams['font.sans-serif'] = ['SimHei']
    mpl.rcParams['axes.unicode_minus'] = False
    
    x=np.random.normal(loc=10,scale=1,size=100)
    
    plt.hist(x,bins=50)
    plt.title('直方图')
    plt.xlabel('x')
    plt.ylabel('y')
    plt.show()
    

    6.图形属性
    常用的颜色属性

    cnames = {
    'aliceblue':            '#F0F8FF',
    'antiquewhite':         '#FAEBD7',
    'aqua':                 '#00FFFF',
    'aquamarine':           '#7FFFD4',
    'azure':                '#F0FFFF',
    'beige':                '#F5F5DC',
    'bisque':               '#FFE4C4',
    'black':                '#000000',
    'blanchedalmond':       '#FFEBCD',
    'blue':                 '#0000FF',
    'blueviolet':           '#8A2BE2',
    'brown':                '#A52A2A',
    'burlywood':            '#DEB887',
    'cadetblue':            '#5F9EA0',
    'chartreuse':           '#7FFF00',
    'chocolate':            '#D2691E',
    'coral':                '#FF7F50',
    'cornflowerblue':       '#6495ED',
    'cornsilk':             '#FFF8DC',
    'crimson':              '#DC143C',
    'cyan':                 '#00FFFF',
    'darkblue':             '#00008B',
    'darkcyan':             '#008B8B',
    'darkgoldenrod':        '#B8860B',
    'darkgray':             '#A9A9A9',
    'darkgreen':            '#006400',
    'darkkhaki':            '#BDB76B',
    'darkmagenta':          '#8B008B',
    'darkolivegreen':       '#556B2F',
    'darkorange':           '#FF8C00',
    'darkorchid':           '#9932CC',
    'darkred':              '#8B0000',
    'darksalmon':           '#E9967A',
    'darkseagreen':         '#8FBC8F',
    'darkslateblue':        '#483D8B',
    'darkslategray':        '#2F4F4F',
    'darkturquoise':        '#00CED1',
    'darkviolet':           '#9400D3',
    'deeppink':             '#FF1493',
    'deepskyblue':          '#00BFFF',
    'dimgray':              '#696969',
    'dodgerblue':           '#1E90FF',
    'firebrick':            '#B22222',
    'floralwhite':          '#FFFAF0',
    'forestgreen':          '#228B22',
    'fuchsia':              '#FF00FF',
    'gainsboro':            '#DCDCDC',
    'ghostwhite':           '#F8F8FF',
    'gold':                 '#FFD700',
    'goldenrod':            '#DAA520',
    'gray':                 '#808080',
    'green':                '#008000',
    'greenyellow':          '#ADFF2F',
    'honeydew':             '#F0FFF0',
    'hotpink':              '#FF69B4',
    'indianred':            '#CD5C5C',
    'indigo':               '#4B0082',
    'ivory':                '#FFFFF0',
    'khaki':                '#F0E68C',
    'lavender':             '#E6E6FA',
    'lavenderblush':        '#FFF0F5',
    'lawngreen':            '#7CFC00',
    'lemonchiffon':         '#FFFACD',
    'lightblue':            '#ADD8E6',
    'lightcoral':           '#F08080',
    'lightcyan':            '#E0FFFF',
    'lightgoldenrodyellow': '#FAFAD2',
    'lightgreen':           '#90EE90',
    'lightgray':            '#D3D3D3',
    'lightpink':            '#FFB6C1',
    'lightsalmon':          '#FFA07A',
    'lightseagreen':        '#20B2AA',
    'lightskyblue':         '#87CEFA',
    'lightslategray':       '#778899',
    'lightsteelblue':       '#B0C4DE',
    'lightyellow':          '#FFFFE0',
    'lime':                 '#00FF00',
    'limegreen':            '#32CD32',
    'linen':                '#FAF0E6',
    'magenta':              '#FF00FF',
    'maroon':               '#800000',
    'mediumaquamarine':     '#66CDAA',
    'mediumblue':           '#0000CD',
    'mediumorchid':         '#BA55D3',
    'mediumpurple':         '#9370DB',
    'mediumseagreen':       '#3CB371',
    'mediumslateblue':      '#7B68EE',
    'mediumspringgreen':    '#00FA9A',
    'mediumturquoise':      '#48D1CC',
    'mediumvioletred':      '#C71585',
    'midnightblue':         '#191970',
    'mintcream':            '#F5FFFA',
    'mistyrose':            '#FFE4E1',
    'moccasin':             '#FFE4B5',
    'navajowhite':          '#FFDEAD',
    'navy':                 '#000080',
    'oldlace':              '#FDF5E6',
    'olive':                '#808000',
    'olivedrab':            '#6B8E23',
    'orange':               '#FFA500',
    'orangered':            '#FF4500',
    'orchid':               '#DA70D6',
    'palegoldenrod':        '#EEE8AA',
    'palegreen':            '#98FB98',
    'paleturquoise':        '#AFEEEE',
    'palevioletred':        '#DB7093',
    'papayawhip':           '#FFEFD5',
    'peachpuff':            '#FFDAB9',
    'peru':                 '#CD853F',
    'pink':                 '#FFC0CB',
    'plum':                 '#DDA0DD',
    'powderblue':           '#B0E0E6',
    'purple':               '#800080',
    'red':                  '#FF0000',
    'rosybrown':            '#BC8F8F',
    'royalblue':            '#4169E1',
    'saddlebrown':          '#8B4513',
    'salmon':               '#FA8072',
    'sandybrown':           '#FAA460',
    'seagreen':             '#2E8B57',
    'seashell':             '#FFF5EE',
    'sienna':               '#A0522D',
    'silver':               '#C0C0C0',
    'skyblue':              '#87CEEB',
    'slateblue':            '#6A5ACD',
    'slategray':            '#708090',
    'snow':                 '#FFFAFA',
    'springgreen':          '#00FF7F',
    'steelblue':            '#4682B4',
    'tan':                  '#D2B48C',
    'teal':                 '#008080',
    'thistle':              '#D8BFD8',
    'tomato':               '#FF6347',
    'turquoise':            '#40E0D0',
    'violet':               '#EE82EE',
    'wheat':                '#F5DEB3',
    'white':                '#FFFFFF',
    'whitesmoke':           '#F5F5F5',
    'yellow':               '#FFFF00',
    'yellowgreen':          '#9ACD32'}
    

    marker可选参数

    '.'       point marker
    ','       pixel marker
    'o'       circle marker
    'v'       triangle_down marker
    '^'       triangle_up marker
    '<'       triangle_left marker
    '>'       triangle_right marker
    '1'       tri_down marker
    '2'       tri_up marker
    '3'       tri_left marker
    '4'       tri_right marker
    's'       square marker
    'p'       pentagon marker
    '*'       star marker
    'h'       hexagon1 marker
    'H'       hexagon2 marker
    '+'       plus marker
    'x'       x marker
    'D'       diamond marker
    'd'       thin_diamond marker
    '|'       vline marker
    '_'       hline marker
    
    

    linestyle可选参数:

    '-'       solid line style
    '--'      dashed line style
    '-.'      dash-dot line style
    ':'       dotted line style
    
    
    import numpy as np
    import matplotlib.pyplot as plt
    from pylab import *
    mpl.rcParams['font.sans-serif'] = ['SimHei']
    mpl.rcParams['axes.unicode_minus'] = False
    
    x=np.linspace(start=0,stop=30,num=30)
    y=np.sin(x)
    plt.plot(x,y,color='r',marker='d',linestyle='--',linewidth=2,alpha=0.8)
    plt.title("颜色:红,标记:菱形,线性:虚线,线宽:2,透明度:0.8")
    plt.xlabel('x')
    plt.ylabel('y')
    plt.show()
    

    7.子图

    import numpy as np
    import matplotlib.pyplot as plt
    from pylab import *
    mpl.rcParams['font.sans-serif'] = ['SimHei']
    mpl.rcParams['axes.unicode_minus'] = False
    
    fig=plt.figure(figsize=(10,10))#指定画布大小
    ax1=fig.add_subplot(2,2,1)#添加一个子图,返回子图句柄
    ax2=fig.add_subplot(2,2,2)
    ax3=fig.add_subplot(2,2,3)
    ax4=fig.add_subplot(2,2,4)
    
    #子图1
    x=np.linspace(start=0,stop=30,num=30)
    y=sin(x)
    ax1.plot(x,y)
    ax1.set_xlabel('x')
    ax1.set_ylabel('y')
    ax1.set_title('子图1')
    
    
    #子图2
    x=np.random.randint(low=2,high=10,size=10)
    y=np.random.randint(low=2,high=10,size=10)
    ax2.scatter(x,y)
    ax2.set_xlabel('x')
    ax2.set_ylabel('y')
    ax2.set_title('子图2')
    #子图3
    x=['a','b','c','d']
    y=[3,5,7,9]
    ax3.bar(x,y,width=0.5)
    ax3.set_xlabel('x')
    ax3.set_ylabel('y')
    ax3.set_title('子图3')
    
    #子图4
    x=np.random.normal(loc=10,scale=1,size=100)
    ax4.hist(x,bins=50)
    ax4.set_xlabel('x')
    ax4.set_ylabel('y')
    ax4.set_title('子图4')
    
    plt.show()
    

    或者

    
    import numpy as np
    import matplotlib.pyplot as plt
    from pylab import *
    mpl.rcParams['font.sans-serif'] = ['SimHei']
    mpl.rcParams['axes.unicode_minus'] = False
    
    fig=plt.figure(figsize=(10,10))#指定画布大小
    
    
    #子图1
    plt.subplot(2,2,1)
    x=np.linspace(start=0,stop=30,num=30)
    y=sin(x)
    plt.plot(x,y)
    plt.xlabel('x')
    plt.ylabel('y')
    plt.title('子图1')
    
    
    #子图2
    plt.subplot(2,2,2)
    x=np.random.randint(low=2,high=10,size=10)
    y=np.random.randint(low=2,high=10,size=10)
    plt.scatter(x,y)
    plt.xlabel('x')
    plt.ylabel('y')
    plt.title('子图2')
    #子图3
    plt.subplot(2,2,3)
    x=['a','b','c','d']
    y=[3,5,7,9]
    plt.bar(x,y,width=0.5)
    plt.xlabel('x')
    plt.ylabel('y')
    plt.title('子图3')
    
    #子图4
    plt.subplot(2,2,4)
    x=np.random.normal(loc=10,scale=1,size=100)
    plt.hist(x,bins=50)
    plt.xlabel('x')
    plt.ylabel('y')
    plt.title('子图4')
    plt.show()
    
    

    8.三维图:曲线

    import numpy as np
    from mpl_toolkits.mplot3d import Axes3D
    import matplotlib.pyplot as plt
    from pylab import *
    mpl.rcParams['font.sans-serif'] = ['SimHei']
    mpl.rcParams['axes.unicode_minus'] = False
    
    fig=plt.figure(figsize=(10,10))#指定画布大小
    ax=fig.gca(projection='3d')#指定为3D
    
    #子图1
    theta=np.linspace(-4*np.pi,4*np.pi,100)
    
    z=np.linspace(start=-2,stop=2,num=100)
    r=z**2+1
    x=r*np.sin(theta)
    y=z*np.cos(theta)
    ax.plot(x,y,z)
    plt.show()
    
    

    9.三维图:散点图

    import numpy as np
    from mpl_toolkits.mplot3d import Axes3D
    import matplotlib.pyplot as plt
    from pylab import *
    mpl.rcParams['font.sans-serif'] = ['SimHei']
    mpl.rcParams['axes.unicode_minus'] = False
    
    fig=plt.figure(figsize=(10,10))#指定画布大小
    ax=fig.gca(projection='3d')#指定为3D
    
    #子图1
    x1=np.random.random(100)*20
    y1=np.random.random(100)*20
    z=x1+y1
    ax.scatter(x1,y1,z)
    plt.show()
    
    

    10.三维图:曲面图

    import numpy as np
    from mpl_toolkits.mplot3d import Axes3D
    import matplotlib.pyplot as plt
    from pylab import *
    mpl.rcParams['font.sans-serif'] = ['SimHei']
    mpl.rcParams['axes.unicode_minus'] = False
    
    fig=plt.figure(figsize=(10,10))#指定画布大小
    ax=fig.gca(projection='3d')#指定为3D
    
    x=np.arange(-5,5,0.25)
    y=np.arange(-5,5,0.25)
    x,y=np.meshgrid(x,y)#用np.meshgrid生成坐标网格矩阵
    z=np.sin(np.sqrt(x**2+y**2))
    #使用plot_surface函数
    #cmap=cm.coolwarm是颜色属性
    surf=ax.plot_surface(x,y,z,cmap=cm.coolwarm)
    plt.show()
    
    

    11.动态图

    import matplotlib.pyplot as plt
    import numpy as np
    
    POINTS = 100
    sin_list = [0] * POINTS
    indx = 0
    # fig, ax = plt.subplots()
    while True:
        if indx == 40:
            indx = 0
        indx += 1
        # 更新绘图数据
        sin_list = sin_list[1:] + [np.sin((indx / 20) * np.pi)]
        # 显示时间
        plt.pause(0.01)
        # 清除上一次显示
        plt.cla()
        plt.plot(sin_list)
        # plt.draw()也可以放在这个位置,不会阻塞
    plt.draw()
    
    

    12.使图片可以手动保存
        前面画的图,我们只能copy,不能自己手动保存。
    添加一行代码import matplotlib; matplotlib.use('TkAgg') 即可实现

        不加这行代码

        加

    import numpy as np
    import matplotlib.pyplot as plt
    import matplotlib; matplotlib.use('TkAgg')
    from pylab import *
    mpl.rcParams['font.sans-serif'] = ['SimHei']
    mpl.rcParams['axes.unicode_minus'] = False
    x=np.linspace(-2*np.pi,2*np.pi,400)
    siny=np.sin(x)
    cosy=np.cos(x)
    
    plt.plot(x,siny,color="red",label="sin(x)")
    plt.plot(x,cosy,color="blue",label="cos(x)",linestyle="--")
    plt.xlabel("输入数据 x")
    plt.ylabel("sin(x) 或者 cos(x)")
    plt.title("三角函数图")
    plt.legend()
    plt.show()
    
    

    然后我们可以手动保存,可以保存为不同格式。

    13.调整坐标轴刻度大小
    在绘图里加一行代码即可

    plt.tick_params(labelsize=23)
    

    14.高级三维 曲线图

    import numpy as np
    from mpl_toolkits.mplot3d import Axes3D
    import matplotlib.pyplot as plt
    from pylab import *
    mpl.rcParams['font.sans-serif'] = ['SimHei']
    mpl.rcParams['axes.unicode_minus'] = False
    
    fig=plt.figure(figsize=(10,10))#指定画布大小
    ax=fig.gca(projection='3d')#指定为3D
    
    #子图1
    theta=np.linspace(-4*np.pi,4*np.pi,100)
    x=np.sin(theta)
    y=np.cos(theta)
    
    ax.plot(np.ones(len(x)),np.arange(len(x)),x)
    ax.plot(2*np.ones(len(x)),np.arange(len(x)),x)
    ax.plot(3*np.ones(len(y)),np.arange(len(y)),y)
    #plt.axis('off')#关闭所有坐标轴
    ax.set_xlabel('个数')
    ax.set_ylabel('长度')
    ax.set_zlabel('数')
    plt.legend()
    plt.show()
    

    在这里插入图片描述
    作者:电气余登武

    展开全文
  • 今天小编就为大家分享一篇Python 读取串口数据,动态绘图的示例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
  • python中的matplotlib绘制动态条形图。
  • "星期四","星期五","星期六","星期日"] return week[t.weekday()] def Date(t): y = t.year m = t.month d = t.day return "%s %d %d" % (y,m,d) def Tick(): 绘制表针的动态显示 t = datetime.today() second = t....
  • Python 读取串口数据,动态绘图

    万次阅读 多人点赞 2018-12-05 23:47:08
    最近工作需要把单片机读取的传感器电压数据实时在PC上通过曲线显示出来,刚好在看python, 就试着用了python 与uart端口通讯,并且通过matplotlib.pyplot 模块实时绘制图形出来。 1. 废话少说,上图 程序运行效果 ...
  • Python教程之粒子运动轨迹动态绘图

    千次阅读 2020-08-30 17:51:43
      今天我们来讲一下Python中的动态绘图库–matplotlib.animation,以粒子运动轨迹为例来说明如何绘制动态图。   假设按照圆周运动,如下图所示: 为了模拟这个运动,我们需要如下信息:粒子的起始位置、速度和...
  • Python 读取数据库数据,动态绘图

    千次阅读 2019-05-30 11:19:33
    ... 手动输入相关串口参数 ...但单片机送出数据速度很快时, python plot 绘图会明显卡顿。 为解决此问题,已经用C# 重新做了个winform UI, 使用chart控件来绘图。可以参考本人另一篇博客。
  • Python 绘图—使用Turtle库绘制动态钟表

    万次阅读 多人点赞 2017-02-26 21:05:37
    Python函数库众多,而且在不断更新,所以学习这些函数库最有效的方法,就是阅读Python官方文档。...绘制动态钟表的基本思路如下(面向对象的编程): 使用5个turtle对象 1个turtle:绘制外表盘 3个turt
  • 绘图(两种:曲线与区域) 动画 保存与显示 代码 import numpy as np import matplotlib.pyplot as plt from matplotlib.animation import FuncAnimation import matplotlib.animation as animation import pandas ...
  • Python的turtle库绘图-动态樱花

    千次阅读 2020-02-24 19:20:32
    Python的turtle库绘图-动态樱花 loading......效果图 import turtle as T import random import time # 画樱花的躯干(60,t) def Tree(branch, t): time.sleep(0.0005) if branch > 3: if 8 <= branch ...
  • 根据Python代码创建物理问题草图的工具。 目的 Pysketcher通常可用于绘制图形,例如 可以使用许多绘图程序轻松地交互式制作此类图形。 但是,Pysketcher图形是通过计算机代码定义的。 这具有很大的优势:可以根据...
  • python绘图包pyecharts

    2019-12-16 16:06:09
    1.pyecharts Echarts 是一个由百度开源的数据可视化,凭借着良好的交互性,精巧的图表设计,得到了众多...支持动态绘图,图中通过点击可以进行选择显示等动态显示功能。 2.安装 $pip install pyecharts -U import ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 418
精华内容 167
关键字:

python动态绘图

python 订阅