zoukankan      html  css  js  c++  java
  • python制作动态排序图

    一、代码

    import pandas as pd
    import matplotlib.pyplot as plt
    import  matplotlib.ticker as ticker
    import matplotlib.animation as animation
    
    df = pd.read_csv(r'动态排序数据.csv',
                     usecols=['name', 'group', 'year', 'value'])
    
    colors = dict(zip(
        ['India', 'Europe', 'Asia', 'Latin America',
         'Middle East', 'North America', 'Africa'],
        ['#adb0ff', '#ffb3ff', '#90d595', '#e48381',
         '#aafbff', '#f7bb5f', '#eafb50']
    ))
    
    group_lk = df.set_index('name')['group'].to_dict()
    fig, ax = plt.subplots(figsize=(15, 8))
    
    
    def draw_barchart(year):
        dff = df[df['year'].eq(year)].sort_values(by='value', ascending=True).tail(10)
        ax.clear()
        ax.barh(dff['name'], dff['value'], color=[colors[group_lk[x]] for x in dff['name']])
        dx = dff['value'].max() / 200
        for i, (value, name) in enumerate(zip(dff['value'], dff['name'])):
            ax.text(value - dx, i, name, size=14, weight=600, ha='right', va='bottom')
            ax.text(value - dx, i - .25, group_lk[name], size=10, color='#444444', ha='right', va='baseline')
            ax.text(value + dx, i, f'{value:,.0f}', size=14, ha='left', va='center')
        # ... polished styles
        ax.text(1, 0.4, year, transform=ax.transAxes, color='#777777', size=46, ha='right', weight=800)
        ax.text(0, 1.06, 'Population (thousands)', transform=ax.transAxes, size=12, color='#777777')
        ax.xaxis.set_major_formatter(ticker.StrMethodFormatter('{x:,.0f}'))
        ax.xaxis.set_ticks_position('top')
        ax.tick_params(axis='x', colors='#777777', labelsize=12)
        ax.set_yticks([])
        ax.margins(0, 0.01)
        ax.grid(which='major', axis='x', linestyle='-')
        ax.set_axisbelow(True)
        ax.text(0, 1.11, 'The most populous cities in the world from 1968 to 2018',
                transform=ax.transAxes, size=24, weight=600, ha='left')
        ax.text(1, 0, 'by maple', transform=ax.transAxes, ha='right',size=15,
                    color='#777777', bbox=dict(facecolor='white', alpha=0.8, edgecolor='white'))
        plt.box(False)
    
    animator = animation.FuncAnimation(fig=fig, func=draw_barchart, frames=range(1968, 2019))
    
    animator.save("动态排序.gif")

    数据地址:

    https://pan.baidu.com/s/1Qml2z48B4-6PEB1Pjg4v_w

    提取密码:2jb4

  • 相关阅读:
    CodeForces 650C Table Compression
    HDU 5632 Rikka with Array [想法题]
    HDU 4352 XHXJ's LIS
    HDU 5634 Rikka with Phi
    HDU 4763 Theme Section
    LightOJ 1342 Aladdin and the Magical Sticks [想法题]
    HDU 4578 Transformation
    POJ 1177 Picture
    HDU 4614 Vases and Flowers
    SPOJ AEROLITE
  • 原文地址:https://www.cnblogs.com/angelyan/p/12230208.html
Copyright © 2011-2022 走看看