Python:pandas读取Excel数据用matplotlib图表呈现

民航局官网(http://www.caac.gov.cn/XXGK/XXGK/TJSJ/202003/t20200309_201358.html)提供了一份excel表格数据:2019年民航机场吞吐量排名.xls,如图:

作为备份,同步存放一份到 https://download.csdn.net/download/zhangphil/13624153,下载后是一份excel数据文件。内容如上。

该份数据包含了2019年各大城市机场客流量数据和排名。用Python的pandas读取该excel表格数据,然后用matplotlib绘制中国各大城市机场客流量的排名。Python代码:

import matplotlib
import pandas as pd
import matplotlib.pyplot as plt

KEYS = ['城市机场', '排名', '客流量']
FONT_SIZE = 18


# 数据清洗
# 数据链接 https://download.csdn.net/download/zhangphil/13624153
def get_data():
    df = pd.read_excel(io='2019年民航机场吞吐量排名.xls',
                       nrows=20,  # 读取20行
                       skiprows=[1, 2, 3, 4],  # 跳过1,2,3,4行
                       index_col=[0, 1, 2])  # 读取0,1,2列

    data = []
    for v in df.index.values:
        bundle = {}
        for i in range(len(KEYS)):
            bundle.setdefault(KEYS[i], v[i])
        data.append(bundle)

    return data


if __name__ == '__main__':
    myfont = matplotlib.font_manager.FontProperties(fname='C:\Windows\Fonts\msyh.ttc')
    plt.rcParams['axes.unicode_minus'] = False  # 用来正常显示负号
    plt.rc('font', family='YaHei', weight='bold')

    data = get_data()

    name = []
    client = []
    order = []
    for d in data:
        name.append(d[KEYS[0]])
        order.append(d[KEYS[1]])
        client.append(d[KEYS[2]])

    # plt.rcdefaults()
    fig, ax = plt.subplots(figsize=(14, 12))

    b = ax.barh(range(len(name)), client, align='center', color='red')

    # 为横向水平的柱图右侧添加数据标签。
    i = 0
    for rect in b:
        w = rect.get_width()
        ax.text(x=w, y=rect.get_y() + rect.get_height() / 2, s='%d' % (int(w) / 10000) + "万",
                horizontalalignment='left', verticalalignment='center',
                fontproperties=myfont, fontsize=FONT_SIZE, color='green')
        ax.text(x=w / 2, y=rect.get_y() + rect.get_height() / 2, s=str(order[i]),
                horizontalalignment='left', verticalalignment='center',
                fontproperties=myfont, fontsize=FONT_SIZE, color='white')
        i = i + 1

    ax.set_yticks(range(len(name)))
    ax.set_yticklabels(name, fontsize=FONT_SIZE, fontproperties=myfont)

    ax.invert_yaxis()

    ax.set_xlabel('数据来源:民航局', fontsize=FONT_SIZE + 5, fontproperties=myfont)
    ax.set_title('2019年中国城市机场客流量排名TOP20', fontsize=FONT_SIZE + 10, fontproperties=myfont)

    # 不要横坐标上的label标签。
    plt.xticks(())

    # 清除四周的边框线
    ax.get_yaxis().set_visible(True)
    for spine in ["left", "top", "right", "bottom"]:
        ax.spines[spine].set_visible(False)

    plt.subplots_adjust(left=0.15)  # 调整左侧边距

    #ax.margins(y=0.01) #缩放 zoom in

    ax.set_aspect('auto')

    plt.show()

 

上面Python代码生成的统计图表结果输出:

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

zhangphil

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值