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("\n", "")
    all_html_105 = df_105.to_html(escape=False, index=False).replace("\n", "")
    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("\n", "")
    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="[email protected]", 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()

 

猜你喜欢

转载自www.cnblogs.com/Erick-L/p/10872556.html