一文教你绘制多图---由低级到高级

01

前言

前面学习了一系列基础图形的绘制,但是有时我们需要将多个图放在一个画布上。干货奉上,一文教你绘制多图。

代码实现

import plotly as py
from plotly import tools
import pandas as pd
from plotly import  graph_objs as go

pyplt=py.offline.plot

def read_csv(): #读取csv文件中的天气数据
    df=pd.read_csv('tian.csv')
    df.loc[:, 'bWendu'] = df['bWendu'].str.replace("℃", '').astype('int32')
    df.loc[:, 'yWendu'] = df['yWendu'].str.replace("℃", '').astype('int32')
    df.loc[:, 'wencha'] = df['bWendu'] - df['yWendu']
    b_list=[i for i in df.loc[:,'bWendu']]
    y_list=[i for i in df.loc[:,'yWendu']]
    wc_list=[i for i in df.loc[:,'wencha']]
    aqi_list=[int(i) for i in df.loc[:,'aqi']]
    x=[i for i in range(1,32)]
    print(b_list,y_list,wc_list,aqi_list,x)
    return b_list,y_list,wc_list,aqi_list,x

def plot_way1(b_list,y_list,wc_list,aqi_list,x):#第一种绘制多图的数据
    trace1 = go.Scatter(
        x=x,
        y=b_list,
        name='每日最高温度'
    )
    trace2 = go.Scatter(
        x=x,
        y=y_list,
        xaxis='x2',
        yaxis='y2',
        name='每日最低温度'
    )
    trace3 = go.Scatter(
        x=x,
        y=wc_list,
        xaxis='x3',
        yaxis='y3',
        name='每日温差'
    )
    trace4 = go.Scatter(
        x=x,
        y=aqi_list,
        xaxis='x4',
        yaxis='y4',
        name='每日空气质量指数'
    )
    data = [trace1, trace2, trace3, trace4]
    layout = go.Layout(
        title='2018年1月份北京最高温度,最低温度,温差和空气质量变化情况',
        xaxis=dict(
            domain=[0, 0.45]
        ),
        yaxis=dict(
            domain=[0, 0.45]
        ),
        xaxis2=dict(
            domain=[0.55, 1]
        ),
        xaxis3=dict(
            domain=[0, 0.45],
            anchor='y3'
        ),
        xaxis4=dict(
            domain=[0.55, 1],
            anchor='y4'
        ),
        yaxis2=dict(
            domain=[0, 0.45],
            anchor='x2'
        ),
        yaxis3=dict(
            domain=[0.55, 1]
        ),
        yaxis4=dict(
            domain=[0.55, 1],
            anchor='x4'
        )
    )
    fig = go.Figure(data=data, layout=layout)
    pyplt(fig, filename='temp/多图应用方法一.html')

def plot_way2(b_list,y_list,wc_list,aqi_list,x):#第二种绘制多图的方法
    trace1 = go.Scatter(
        x=x,
        y=b_list,
        name='每日最高温度'
    )
    trace2 = go.Scatter(
        x=x,
        y=y_list,
        name='每日最低温度'
    )
    trace3 = go.Scatter(
        x=x,
        y=wc_list,
        name='每日温差'
    )
    trace4 = go.Scatter(
        x=x,
        y=aqi_list,
        name='每日空气质量指数'
    )
    fig=tools.make_subplots(rows=2,cols=2)#两行一列
    fig.append_trace(trace1,1,1)
    fig.append_trace(trace2,1,2)
    fig.append_trace(trace3,2,1)
    fig.append_trace(trace4,2,2)

    fig['layout'].update(height=1000,width=1000,title='2018年1月份北京最高温度,最低温度,温差和空气质量变化情况')
    pyplt(fig,filename='temp/多图应用方法二.html')

def plot_view(b_list,y_list,wc_list,x):#分割视图空间
    trace1 = go.Scatter(
        x=x,
        y=b_list,
        name='每日最高温度'
    )
    trace2 = go.Scatter(
        x=x,
        y=y_list,
        name='每日最低温度'
    )
    trace3 = go.Scatter(
        x=x,
        y=wc_list,
        name='每日温差'
    )
    fig=tools.make_subplots(rows=2,cols=2,specs=[[{},{}],[{'colspan':2},None]])
    fig.append_trace(trace1, 1, 1)
    fig.append_trace(trace2, 1, 2)
    fig.append_trace(trace3, 2, 1)
    fig['layout'].update(height=600, width=1000, title='分割视图空间')
    pyplt(fig, filename='temp/多图应用视图空间.html')

def plot_insert(b_list,wc_list,x):#嵌入式子图
    trace1 = go.Scatter(
        x=x,
        y=b_list,
        name='每日最高温度'
    )
    trace2 = go.Scatter(
        x=x,
        y=wc_list,
        xaxis='x2',
        yaxis='y2',
        name='每日温差'
    )
    data=[trace1,trace2]
    layout=go.Layout(
        xaxis2=dict(
            domain=[0.6,0.95],
            anchor='y2'
        ),
        yaxis2=dict(
            domain=[0.6,0.95],
            anchor='x2'
        )
    )
    fig=go.Figure(data=data,layout=layout)
    pyplt(fig,filename='temp/多图应用之嵌入式子图.html')

if __name__ == '__main__':
    b_list,y_list,wc_list,aqi_list,x=read_csv()
    plot_way1(b_list, y_list, wc_list, aqi_list, x)
    plot_way2(b_list, y_list, wc_list, aqi_list, x)
    plot_view(b_list, y_list, wc_list, x)
    plot_insert(b_list, wc_list, x)

代码所用到的csv文件

ymd,bWendu,yWendu,tianqi,fengxiang,fengli,aqi,aqiInfo,aqiLevel
2018-01-01,3℃,-6℃,晴~多云,东北风,1-2级,59,良,2
2018-01-02,2℃,-5℃,阴~多云,东北风,1-2级,49,优,1
2018-01-03,2℃,-5℃,多云,北风,1-2级,28,优,1
2018-01-04,0℃,-8℃,阴,东北风,1-2级,28,优,1
2018-01-05,3℃,-6℃,多云~晴,西北风,1-2级,50,优,1
2018-01-06,2℃,-5℃,多云~阴,西南风,1-2级,32,优,1
2018-01-07,2℃,-4℃,阴~多云,西南风,1-2级,59,良,2
2018-01-08,2℃,-6℃,晴,西北风,4-5级,50,优,1
2018-01-09,1℃,-8℃,晴,西北风,3-4级,34,优,1
2018-01-10,-2℃,-10℃,晴,西北风,1-2级,26,优,1
2018-01-11,-1℃,-10℃,晴,北风,1-2级,24,优,1
2018-01-12,2℃,-8℃,晴,西南风,1-2级,75,良,2
2018-01-13,3℃,-7℃,多云,南风,1-2级,126,轻度污染,3
2018-01-14,6℃,-5℃,晴~多云,西北风,1-2级,187,中度污染,4
2018-01-15,2℃,-5℃,阴,东南风,1-2级,47,优,1
2018-01-16,4℃,-5℃,多云,南风,1-2级,112,轻度污染,3
2018-01-17,6℃,-7℃,多云~晴,西北风,1-2级,82,良,2
2018-01-18,5℃,-6℃,晴,西南风,1-2级,80,良,2
2018-01-19,7℃,-4℃,晴,南风,1-2级,115,轻度污染,3
2018-01-20,3℃,-6℃,晴~多云,东风,1-2级,64,良,2
2018-01-21,0℃,-5℃,阴~小雪,东北风,1-2级,63,良,2
2018-01-22,-3℃,-10℃,小雪~多云,东风,1-2级,47,优,1
2018-01-23,-4℃,-12℃,晴,西北风,3-4级,31,优,1
2018-01-24,-4℃,-11℃,晴,西南风,1-2级,34,优,1
2018-01-25,-3℃,-11℃,多云,东北风,1-2级,27,优,1
2018-01-26,-3℃,-10℃,晴~多云,南风,1-2级,39,优,1
2018-01-27,-1℃,-9℃,多云,南风,1-2级,105,轻度污染,3
2018-01-28,-1℃,-9℃,晴,西北风,3-4级,55,良,2
2018-01-29,1℃,-8℃,晴,西北风,1-2级,57,良,2
2018-01-30,4℃,-7℃,晴,西北风,1-2级,36,优,1
2018-01-31,3℃,-8℃,晴,西南风,1-2级,60,良,2

效果截图

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值