zoukankan      html  css  js  c++  java
  • python 形状区分市控国控,颜色表示aqi等级

    # 任务需求 从数据库取重点时刻前后各两小时的aqi求平均,画点图、面图

    import pandas as pd
    from datetime import timedelta, datetime
    import numpy as np
    from sqlalchemy import create_engine
    import matplotlib as mpl

    mpl.use("Agg")
    import matplotlib.pyplot as plt
    from mpl_toolkits.basemap import Basemap
    import matplotlib.font_manager as fm

    zhfont1 = fm.FontProperties(fname='/home/gzblue/xgx/xx_copy_files/SIMKAI.TTF')


    def get_station_aqi_mean(station, t_start, t_end):
    """求站点重点时刻平均AQI

    :param station: 站点ID,例如'51010101001'
    :param t_start: 开始时间,time类型或类似时间str
    :param t_end: 结束时间,time类型或类似时间str
    :return: 重点时刻平均AQI
    """

    sql_engine = create_engine('mssql+pymssql://xxxx:xxxx@xxxx:xxxx/AQI_HKY')
    data = pd.read_sql_query(
    "SELECT MN_, DATA_TIME_,AQI_ FROM MS_HOUR_DATA where MN_='%s' and DATA_TIME_>='%s' and DATA_TIME_<='%s'"
    % (station, t_start, t_end), sql_engine)
    # print(data)
    # print(data['AQI_'].mean())
    return data['AQI_'].mean()


    def main(station, goal_time):
    titlename = str(goal_time)
    savepath = r'/data01/home/gzblue/xgx/1205/chengduguoshi_plot/data/' + str(goal_time) + 'new_.png'
    time_mid = datetime.strptime(goal_time, '%Y%m%d%H')
    time_start = time_mid - timedelta(minutes=120)
    time_end = time_mid + timedelta(minutes=120)
    print(time_start)
    print(time_end)
    # 取数据
    station['AQI'] = None
    for mn in station['MN_'].values:
    station.loc[mn, 'AQI'] = get_station_aqi_mean(mn, time_start, time_end)
    print(station)
    # 画图
    station_list = ['51010101001', '51010401001', '51010501001', '51010501002',
    '51010601002', '51010801001', '51010901001']
    map = Basemap(llcrnrlon=102.8, llcrnrlat=30, urcrnrlon=105, urcrnrlat=31.5, projection='lcc',
    lat_1=30, lat_2=60, lat_0=33.3, lon_0=103.3, resolution='l')
    station.index = range(len(station))
    for ss in station_list:
    for i in range(40):
    if station.loc[i, 'MN_'] == ss:
    lons1 = station.loc[i, 'LONG_']
    lats1 = station.loc[i, 'LAT_']
    x1, y1 = map(lons1, lats1)
    if station.loc[i, 'AQI'] < 50:
    map.scatter(x1, y1, marker='s', color='limegreen', s=20)
    elif station.loc[i, 'AQI'] < 100:
    map.scatter(x1, y1, marker='s', color='yellow', s=20)
    elif station.loc[i, 'AQI'] < 150:
    map.scatter(x1, y1, marker='s', color='darkorange', s=20)
    elif station.loc[i, 'AQI'] < 200:
    map.scatter(x1, y1, marker='s', color='red', s=20)
    elif station.loc[i, 'AQI'] < 300:
    map.scatter(x1, y1, marker='s', color='purple', s=20)
    elif station.loc[i, 'AQI'] >= 300:
    map.scatter(x1, y1, marker='s', color='darkred', s=20)
    else:
    pass
    else:
    lons1 = station.loc[i, 'LONG_']
    lats1 = station.loc[i, 'LAT_']
    x1, y1 = map(lons1, lats1)
    if station.loc[i, 'AQI'] < 50:
    map.scatter(x1, y1, marker='v', color='limegreen', s=20, alpha=0.5)
    elif station.loc[i, 'AQI'] < 100:
    map.scatter(x1, y1, marker='v', color='yellow', s=20, alpha=0.5)
    elif station.loc[i, 'AQI'] < 150:
    map.scatter(x1, y1, marker='v', color='darkorange', s=20, alpha=0.5)
    elif station.loc[i, 'AQI'] < 200:
    map.scatter(x1, y1, marker='v', color='red', s=20, alpha=0.5)
    elif station.loc[i, 'AQI'] < 300:
    map.scatter(x1, y1, marker='v', color='purple', s=20, alpha=0.5)
    elif station.loc[i, 'AQI'] >= 300:
    map.scatter(x1, y1, marker='v', color='darkred', s=20, alpha=0.5)
    else:
    pass
    map.scatter(0, 0, marker='v', color='k', s=35, label='市控站点')
    map.scatter(0, 0, marker='s', color='k', s=35, label='国控站点')
    map.scatter(0, 0, marker='8', color='limegreen', s=35, label='优')
    map.scatter(0, 0, marker='8', color='yellow', s=35, label='良')
    map.scatter(0, 0, marker='8', color='darkorange', s=35, label='轻度污染')
    map.scatter(0, 0, marker='8', color='red', s=35, label='中度污染') map.
    scatter(0, 0, marker='8', color='purple', s=35, label='重度污染') map.
    scatter(0, 0, marker='8', color='darkred', s=35, label='严重污染') map.
    scatter(0, 0, marker='8', color='w', s=70) plt.
    legend(prop=zhfont1, fontsize=8, ncol=2, loc=0, columnspacing=0.2, handletextpad=0.2) map.
    readshapefile("/data01/home/share/chengdu_map_new/chengdu_city_merge_new", 'states', drawbounds=True,
    linewidth=0.3, color='gray') map.
    readshapefile("/data01/home/share/OnlyChengdu_Map/chengdu_xzqh_city", 'states', drawbounds=True, linewidth=0.8) plt.
    title(titlename, fontsize=15, fontproperties=zhfont1) plt.
    savefig(savepath, format='png', dpi=300)
    # plt.show()
    plt.close()
    print('完成')


    if __name__ == '__main__':
    # 获得国控与市控的列表
    station_data = pd.read_csv(r'/home/gzblue/xgx/1205/chengduguoshi_plot/data/guoshikong.csv')
    # print(station_data)
    # print(station)
    # print(station.loc['51010101001','NAME_'])

    # goal_time_list = ['2018121612'] # '2018112011'
    goal_time_list = ['2018121512','2018121612','2018121712','2018121812','2018121912','2018122011'] # '2018112011'
    for goal_time in goal_time_list:
    station_new = pd.DataFrame() station_new[
    'MN_'] = station_data['MN_'] station_new[
    'NAME_'] = station_data['NAME_'] station_new[
    'LONG_'] = station_data['LONG_'] station_new[
    'LAT_'] = station_data['LAT_'] station_new.
    set_index('MN_', drop=False, inplace=True)
    print(goal_time)
    main(station_new, goal_time)
  • 相关阅读:
    Java8 lambda表达式10个示例
    我和阿里云RDS的故事
    Spring Mvc 传递参数要controller出现了400,日期参数全局处理,格式化yyyy-MM-dd 和yyyy-MM-dd HH:mm:ss
    剑指Offer_36_两个链表的第一个公共结点
    剑指Offer_35_数组中的逆序对
    剑指Offer_34_找出字符串中第一个只出现一次的字符
    剑指Offer_33_丑数
    剑指Offer_32_把数组排成最小的数
    剑指Offer_31_整数中1出现的次数(从1到n整数中1出现的次数)
    剑指Offer_30_连续子数组的最大和
  • 原文地址:https://www.cnblogs.com/avivi/p/11238236.html
Copyright © 2011-2022 走看看