• python3 plotly库笔记


    导入库

    from plotly import subplots
    import plotly.offilne as offline
    import plotly.express as px
    import plotly.graph_objs as go

    plotly主要有两个用法,graph_objs相对基础一些,express是一个高级的封装,支持更多便捷的操作,也支持对pandas的dataframe操作,为了快捷实现可视化功能可以直接使用express

    测试数据

    x = [0, 1, 2, 3, 4, 5]
    y = [0, 1, 4, 9, 16, 25]
    z = [0, 1, 8, 27, 64, 125]
    c = [0, 0, 1, 2, 3, 4]

     

    graph_objs

    画图框架

    trace = go.Scatter(...)
    
    data = [trace]
    layout = go.Layout(...)
    
    fig = go.Figure(
        data=data,
        layout=layout
    )

    绘制图片

    在jupyter中使用
    方法1:fig.show()
    方法2:offline.iplot(fig)
    
    生成网页
    方法1:offline.plot(fig)

    多个轨迹叠加在同一张图上

    # 方法1,Figure里面可以加data也可以留空,然后底下每多一个图用一次add_trace
    go.Figure()
    go.add_trace(go.Scatter(...))
    go.add_trace(go.Histogram(...))
    
    # 方法2,data数组里面新增图表
    data = [
        go.Scatter(...),
        go.Histogram(...),
        ...
    ]

    多个轨迹在同一张图上但不叠加

    # 方法1,使用subplots
    fig = subplots.make_subplots(rows=2, cols=1)
    fig.append_trace(trace1, 1, 1)  # append和add都可以
    fig.add_trace(trace2, 2, 1)

    绘制二维散点图/折线图

    trace1 = go.Scatter(
        x=x,  # 横轴数据
        y=y,  # 纵轴数据
        mode='markers+lines',  # markers和lines自由组合,用+连接
        name='trace1',  # 多个轨迹在同一个图里时会生效
        marker=dict(
            color=c,  # marker的颜色
            opacity=[1, 0.9, 0.8, 0.7, 0.6, 0.5],  # marker的透明度
            size=[40, 60, 80, 100, 120, 140],  # marker的大小
            cmin=0,  # 颜色的最小值,低于最小值的用最小值上色
            cmax=3,  # 颜色的最大值,高于最大值的用最大值上色
            colorscale='ylorrd',  # marker自动上色的范围
            showscale=True,  # 颜色的图例,默认是True
            colorbar=dict(
                x=-0.18,  # 设置图例位置,为相对网格坐标的比例
                dtick=1,  # 坐标间隔
            )
        ),
    )
    
    trace2 = go.Scatter(
        y=z,  # x可以省略
        mode='markers',
        name='trace2',
        xaxis='x1',  # 默认是axis1,x即x1,y即x1,xaxis2为x2,xaxis3为x3,以此类推
        yaxis='y3',  # 使用yaxis3,在layout里面定义
        marker=dict(
            color=c,
            colorbar=dict(
                x=1.1,
                dtick=0.2,
            )
        )
    )
    trace2.marker.colorscale = 'viridis'  # 第二种设置参数的方式
    trace2.update(marker_reversescale=True)  # 第三种设置参数的方式,设置颜色反转
    
    data=[
        trace1, trace2
    ]
    
    layout = go.Layout(
        title='title',
        xaxis=dict(  # 第一个x轴,xaxis1可简写为xaxis
            title='xaxis_title',  # x轴标题
            dtick=2,  # x轴间隔
            range=(0, 8)  # x轴范围
        ),
        yaxis1=dict(  # 第一个y轴,yaxis1可简写为yaxis
            title='yaxis_title',  # y轴标题
            dtick=7,  # y轴间隔
            color='#0000FF',  # y轴文字颜色
            gridcolor='rgb(0, 0, 255)'  # y轴网格颜色
        ),
        xaxis2=dict(  # 第二个x轴
            title='xaxis2_title',  # 第二个x轴的标题
            overlaying='x',  # 如果不加这行若有多个x轴将只显示其中一个的网格
            side='top'  # 方位有top, bottom, left, right
        ),
        yaxis3={  # 第二个y轴,下面演示的是另一种字典的写法
            'title': 'yaxis2_title',
            'overlaying': 'y',
            'side': 'right',
            'dtick': 30,
            'color': 'red',
            'gridcolor': 'red'
        },
        legend=dict(  # 图例参数
            title=dict(
                text='legend',
                font=dict(
                    size=12,
                    color='black',
                ),
            ),
            bgcolor='white',  # 图例背景色
            x=1,  # 图例横坐标位置
            y=1.3,  # 图例纵坐标位置
            font=dict(
                size=12,  # 图例字体大小
                color='black'  # 图例字体颜色
            )
        ),
    )
    
    
    fig = go.Figure(
        data=data,
        layout=layout
    )
    
    fig.show()

    绘制二维直方图和条形图

    trace1 = go.Bar(
        x=x,
        y=y,
    )
    
    trace2 = go.Histogram(
        x=c,
        xbins = dict(
            start=0,  # 数据范围
            end=4,  # 范围均是左闭右开
            size=5  # 相邻坐标合并的数量
        ),
        opacity=0.5,  # 柱状图的透明度设置
    )
    
    trace3 = go.Histogram(
        x=y,
        xbins = dict(
            start=0,  # 如果有多图叠加的情况下,需要都加上范围,要不然可能会坐标不对齐
            end=26,  # 可以设为max(list) + 1
            size=1,  # 存在多个直方图时如果barmode是overlay,则size分别生效,其他模式则以第一个轨迹的size为准
        ),
        opacity=0.5,
    )
    
    trace4 = go.Bar(
        x=x,
        y=y,
        orientation='h'  # h为horizontal,v为vertical
    )
    
    
    fig = subplots.make_subplots(rows=2, cols=2)  # 两行两列共四个子图
    fig.append_trace(trace1, 1, 1)  # append和add都可以
    fig.add_trace(trace2, 1, 2)  # 子图序号为从左到右后从上到下计数,如果放在1行2列则为2,2行1列则为3,layout中需修改对应的坐标轴序号
    fig.add_trace(trace3, 1, 2)  # 可以叠加多个轨迹到一个子图上
    fig.add_trace(trace4, 2, 2)  # 2行2列即为4,中间可以跳过3
    
    layout = go.Layout(
        title='title',
        xaxis=dict(
            title='xaxis1_title',
            domain=[0, 0.45]  # 零点在左下角
        ),
        yaxis=dict(
            title='yaxis1_title',
            domain=[0.6, 1]
        ),
        xaxis2=dict(
            title='xaxis2_title',
            domain=[0, 1]
        ),
        yaxis2=dict(
            title='yaxis2_title',
            domain=[0, 0.5]  # 子图实际位置是可以随意设置的
        ),
        xaxis4=dict(
            title='xaxis4_title',
            domain=[0.55, 1]
        ),
        yaxis4=dict(
            title='yaxis4_title',
            domain=[0.6, 1]
        ),
        barmode='overlay',  # 不设置默认是group,可以设置为stack、overlay、group和relative,目前仅能进行全局设置
        width=800,
        height=1000,
    )
    
    fig.update_layout(layout)
    fig.show()

    绘制其他图诸如饼图热力图等等均是类似的,具体参数设置参考官方文档即可

    express

    未完待续...

    感谢

    plotly document
    https://plotly.com/python-api-reference/
    可视化神器Plotly_Express详解
    https://www.jianshu.com/p/41735ecd3f75?utm_campaign=hugo
    plotly笔记
    https://www.cxyzjd.com/article/weixin_44390462/105462576
  • 相关阅读:
    macOS下查看端口是否被占用命令
    macOS下安装tomcat服务器
    unittest 知识问答题-也许面试会有用-欢迎补充
    python.unittest中常用断言方法
    如何在命令行terminal中运行pycharm项目
    如何保证 软件测试覆盖率
    如何衡量 测试覆盖率
    软件测试全流程 总结
    接口测试对传统测试模型的改进
    关于http/https协议
  • 原文地址:https://www.cnblogs.com/Pyrokine/p/16373285.html
Copyright © 2020-2023  润新知