• matplotlib绘图难题解决


    # coding=utf-8
    import pandas as pd
    import yagmail
    import requests
    import arrow
    import numpy as np
    import matplotlib as mpl
    from matplotlib.font_manager import _rebuild
    
    _rebuild()  # reload一下
    mpl.rcParams['font.sans-serif'] = ['SimHei']
    mpl.rcParams['font.serif'] = ['SimHei']
    
    now = arrow.now()
    start_time = now.format("YYYY-MM-DD")
    end_time = now.shift(days=7).format("YYYY-MM-DD")
    filter = '''[{"cxxx"}]''' % (
    start_time, end_time)
    
    brand_url = 'hxxx}
    
    headers = {xxx
    }
    
    
    def get_brand_info(tar):
        visible_flag = True
        info = requests.post(brand_url, data=data, headers=headers)
        df_data = info.json()['data']['records']
        df = pd.DataFrame(df_data)
        df_8 = df[df['ad_zone_id'] == 8]
        df_105 = df[df['ad_zone_id'] == 105]
    
        df_8 = df_8[['ptdate', 'fill_rate']]
        df_105 = df_105[['ptdate', 'fill_rate']]
    
        df_8['预xxx级'] = pd.cut(df_8['fill_rate'], bins=[0, 0.05, 0.10, 0.15, np.inf], labels=['空闲', '适中', '紧张', '非常紧张'])
        df_105['预xxx级'] = pd.cut(df_105['fill_rate'], bins=[0, 0.05, 0.10, 0.15, np.inf], labels=['空闲', '适中', '紧张', '非常紧张'])
    
        df_8.rename(columns={'ptdate': '日期', 'fill_rate': '品xxxx率'}, inplace=True)
        df_105.rename(columns={'ptdate': '日期', 'fill_rate': '品xxx率'}, inplace=True)
    
        if tar == 'inner':
            ax_8 = df_8.plot('日期', '品xxxx率', kind='bar', title='首页未来xxxx图', rot=30,
                             color='#0f88eb')
            vals_8 = ax_8.get_yticks()
            ax_8.set_yticklabels(['{:,.2%}'.format(x) for x in vals_8])
            ax_8.set_xticklabels(df_8['日期'].tolist())
            for i, v in enumerate(df_8['品xxx率'].tolist()):
                ax_8.text(i, v + 0.002, str(df_8['预xx级'].tolist()[i]), ha='center', fontweight='bold')
            ax_8.yaxis.set_visible(visible_flag)
            fig_8 = ax_8.get_figure()
            fig_8.savefig('fig8_inner.png')
    
            ax_105 = df_105.plot('日期', '品牌填充率', kind='bar', title='回xxxx图', rot=30,
                                 color='#0f88eb')
            vals_105 = ax_105.get_yticks()
            ax_105.set_yticklabels(['{:,.2%}'.format(x) for x in vals_105])
            ax_105.set_xticklabels(df_105['日期'].tolist())
            for index, value in enumerate(df_105['品xx率'].tolist()):
                ax_105.text(index, value + 0.002, str(df_105['预xxx等级'].tolist()[index]), ha='center', fontweight='bold')
            ax_105.yaxis.set_visible(visible_flag)
            fig_105 = ax_105.get_figure()
            fig_105.savefig('fig105_inner.png')
            df_8['品xxxx充率'] = round(df_8['品xxxx率'] * 100, 2).apply(str) + '%'
            df_105['xxxx率'] = round(df_105['品xxx率'] * 100, 2).apply(str) + '%'
    
        if tar == 'outter':
    
            visible_flag = False
            ax_8 = df_8.plot('日期', '品xxxx充率', kind='bar', title='首xxxxx图', rot=30,
                             color='#0f88eb')
            vals_8 = ax_8.get_yticks()
            ax_8.set_yticklabels(['{:,.2%}'.format(x) for x in vals_8])
            ax_8.set_xticklabels(df_8['日期'].tolist())
            for i, v in enumerate(df_8['品xxxx率'].tolist()):
                ax_8.text(i, v + 0.002, str(df_8['预xxx级'].tolist()[i]), ha='center', fontweight='bold')
            ax_8.yaxis.set_visible(visible_flag)
            fig_8 = ax_8.get_figure()
            fig_8.savefig('fig8_outter.png')
    
            ax_105 = df_105.plot('日期', '品xxx率', kind='bar', title='回xxxx量走势图', rot=30,
                                 color='#0f88eb')
            vals_105 = ax_105.get_yticks()
            ax_105.set_yticklabels(['{:,.2%}'.format(x) for x in vals_105])
            ax_105.set_xticklabels(df_105['日期'].tolist())
            for index, value in enumerate(df_105['品xxxx率'].tolist()):
                ax_105.text(index, value + 0.002, str(df_105['xxx级'].tolist()[index]), ha='center', fontweight='bold')
            ax_105.yaxis.set_visible(visible_flag)
            fig_105 = ax_105.get_figure()
            fig_105.savefig('fig105_outter.png')
            df_8.drop('品xxxxx率', axis=1, inplace=True)
            df_105.drop('品xxx率', axis=1, inplace=True)
    
        all_html_8 = df_8.to_html(escape=False, index=False).replace("
    ", "")
        all_html_105 = df_105.to_html(escape=False, index=False).replace("
    ", "")
        body = 
            """
                <body>
                <div align="center" class="header">
                    <!--标题部分的信息-->
                    <h1 align="center">您好,以下为xxxx占量情况!</h1>
                </div>
                <hr>
                <div class="content">
                    <!--正文内容-->
                    <div>
                        <h4>近一xxxxxx量数据</h4>
                        {}
                        <div style="float:left;margin-left:30px;">
                            <img src='./fig8_{}.png' />
                        </div>
                    </div>
                    <br/>
                    <br/>
                    <div style="clear:both"></div>
                    <div>
                        <h4>近xxx据</h4>
                        {}
                        <div style="float:left;margin-left:30px;">
                            <img src='./fig105_{}.png' />
                        </div>
                    </div>
                    <div style="clear:both"></div>
                    <hr>
                    <p style="text-align: left">
                        —— 本次报告完 ——
                    </p>
                </div>
                </body>
            """.format(all_html_8, tar,all_html_105,tar)
    
        head = 
            '''
            <head>
                <meta charset="utf-8">
                <STYLE TYPE="text/css" MEDIA=screen>
         
                    table.dataframe {
                        border-collapse: collapse;
                        border: 2px solid #a19da2;
                        float:left; 
                        margin-top:56px;
                        /*居中显示整个表格*/
                        /*margin: auto;*/
                    }
         
                    table.dataframe thead {
                        border: 2px solid #91c6e1;
                        background: #f1f1f1;
                        padding: 10px 10px 10px 10px;
                        color: #333333;
                    }
         
                    table.dataframe tbody {
                        border: 2px solid #91c6e1;
                        padding: 10px 10px 10px 10px;
                    }
         
                    table.dataframe tr {
         
                    }
         
                    table.dataframe th {
                        vertical-align: top;
                        font-size: 14px;
                        padding: 10px 10px 10px 10px;
                        color: #105de3;
                        font-family: 微软雅黑;
                        text-align: center;
                    }
         
                    table.dataframe td {
                        text-align: center;
                        padding: 10px 10px 10px 10px;
                    }
         
                    body {
                        font-family: 微软雅黑;
                    }
         
                    h1 {
                        color: blue;
                    }
         
                    div.header h2 {
                        color: #0002e3;
                        font-family: 微软雅黑;
                    }
         
                    h3 {
                        font-size: 22px;
                        background-color: rgba(0, 2, 227, 0.71);
                        text-shadow: 2px 2px 1px #de4040;
                        color: rgba(239, 241, 234, 0.99);
                        line-height: 1.5;
                    }
         
                    h4 {
                        color: blue;
                        font-family: 微软雅黑;
                        font-size: 20px;
                        text-align: left;
                    }
         
                </STYLE>
                </head>
            '''
    
        foot = 
            '''
            <br/>
            <p>
    <br/>
            </p>
            '''
        html_msg = "<html>" + head + body + foot + "</html>"
        html_msg = html_msg.replace("
    ", "")
        with open('./' + tar + '.html', 'w', encoding='UTF-8', newline='') as fout:
            fout.write(html_msg)
        print(df_8.head())
        print(df_105.head())
    
    
    def send_week_mail(tar):
        yag = yagmail.SMTP(user="xxxx@zhihu.com", password="cxxxx", host='smtp.xxxx.com')
        print('正在准xxxx...')
        if tar == 'inner':
            # 链接邮箱服务器
            # zhihu_staff = [xxx]
            yag.send(to=zhihu_staff, subject='未来xxxx页占量',
                     contents=open('./' + tar + '.html', 'r', encoding='UTF-8', newline='').read())
            print('内部xxxx发送!')
        else:
            # agent_staff = ['cxxx']
            agent_staff = ['zxxxx']
            yag.send(to=agent_staff, subject='未来xxxxx页占量',
                     contents=open('./' + tar + '.html', 'r', encoding='UTF-8', newline='').read())
            print('外部每日xxxx发送!')
    
    
    def main():
        target = ['inner', 'outter']
        for tar in target:
            get_brand_info(tar)
            send_week_mail(tar)
    
    
    if __name__ == '__main__':
        main()

     

  • 相关阅读:
    iOS 色值 转换 干货
    控制器view及UIApplication的生命周期
    runtime认识及其用处
    block底层实现原理
    iOS开发,你不得不知的数据存储---干货
    UIImageView(UIImage)的那些细节
    UIButton那些应用细节
    使用gevent写异步代码
    数据分析三剑客之pandas
    数据分析之numpy
  • 原文地址:https://www.cnblogs.com/Erick-L/p/10872556.html
Copyright © 2020-2023  润新知