Python 修改matplotlib中的子批次

Python 修改matplotlib中的子批次,python,pandas,dataframe,matplotlib,Python,Pandas,Dataframe,Matplotlib,我是matplotlib的初学者。 我正在尝试绘制各种子情节,并从中生成动画。 手头的问题- 我试图通过查看几个在线示例来为每个图表添加标签,但没有成功。我还提供了一个图例,但它仅显示在最后一个子图中 我想让绘图更具交互性,比如当我将光标移到绘图上时,它会显示x,y坐标 请建议如何继续制作动画 当我使用pandas dataframe时,有一些方法可以直接绘制图形,但我可以继续研究如何设置它们的动画。请随时提出另一种方法 这是我正在使用的数据- Unnamed: 0 No. of 0r

我是matplotlib的初学者。 我正在尝试绘制各种子情节,并从中生成动画。 手头的问题-

  • 我试图通过查看几个在线示例来为每个图表添加标签,但没有成功。我还提供了一个图例,但它仅显示在最后一个子图中
  • 我想让绘图更具交互性,比如当我将光标移到绘图上时,它会显示x,y坐标
  • 请建议如何继续制作动画
  • 当我使用pandas dataframe时,有一些方法可以直接绘制图形,但我可以继续研究如何设置它们的动画。请随时提出另一种方法

    这是我正在使用的数据-

     Unnamed: 0     No. of 0runs    No. of 1run     No. of 2runs    No. of 3runs    No. of 4runs    No. of 5runs    No. of 6runs    Seasons
    0   0   5279    4654    729     39  1702    6   622     1
    1   1   5422    4861    994     60  1320    3   508     2
    2   2   5330    5410    910     50  1709    3   587     3
    3   3   6675    6203    1021    50  1913    7   639     4
    4   4   7092    6839    1113    58  1911    8   731     5
    5   5   7294    6589    1179    71  2053    5   681     6
    6   6   5361    5190    1009    56  1563    5   715     7
    7   7   5043    4928    880     46  1611    1   692     8
    8   8   4908    5434    1007    43  1632    4   639     9
    
    这是我的密码-

    axs=[0,1,2,3,4,5,6]
    f, axs = plt.subplots(7,figsize=(10,10))
    
    x = seas
    axs[0].plot(x, df_of_topruns['No. of 0runs'],c='b',label='No. of zero runs scored in season')
    axs[1].plot(x, df_of_topruns['No. of 1run'],c='r',label='No. of one run scored in season')
    axs[2].plot(x, df_of_topruns['No. of 2runs'],c='yellow',label='No. of two runs scored in season')
    axs[3].plot(x, df_of_topruns['No. of 3runs'],c='orange',label='No. of three runs scored in season')
    axs[4].plot(x, df_of_topruns['No. of 4runs'],c='black',label='No. of four runs scored in season')
    axs[5].plot(x, df_of_topruns['No. of 5runs'],c='grey',label='No. of five runs scored in season')
    axs[6].plot(x, df_of_topruns['No. of 6runs'],c='g',label='No. of six runs scored in season')
    

    作为动画的一种基本形式,动画函数是通过重复动画函数中的x轴数来创建的,以获得数据帧的值。请参阅。对于交互式功能,我建议使用另一个live reilly,如plotly

    import pandas as pd
    import numpy as np
    import io
    
    data = '''
     "No. of 0runs" "No. of 1run" "No. of 2runs" "No. of 3runs" "No. of 4runs" "No. of 5runs" "No. of 6runs" Seasons
    0 5279 4654 729 39 1702 6 622 1
    1 5422 4861 994 60 1320 3 508 2
    2 5330 5410 910 50 1709 3 587 3
    3 6675 6203 1021 50 1913 7 639 4
    4 7092 6839 1113 58 1911 8 731 5
    5 7294 6589 1179 71 2053 5 681 6
    6 5361 5190 1009 56 1563 5 715 7
    7 5043 4928 880 46 1611 1 692 8
    8 4908 5434 1007 43 1632 4 639 9
    '''
    
    df = pd.read_csv(io.StringIO(data), sep='\s+')
    
    import matplotlib.pyplot as plt
    from matplotlib.animation import FuncAnimation
    from matplotlib.animation import PillowWriter
    
    axs=[0,1,2,3,4,5,6]
    fig, axs = plt.subplots(7,figsize=(10,10))
    labels = df.columns[:-1].tolist()
    x = df['Seasons'].tolist()
    colors = ['b','r','y','orange','k','grey','g']
    
    # for i,l in enumerate(labels):
    #     axs[i].plot(x, df[l],c=colors[i],label=l+' scored in season')
    #     axs[i].set_title(l)
    #     axs[i].legend(loc='best')
    
    fig.subplots_adjust(hspace=1.0)
    
    def animate(i):
        for k, l in enumerate(labels):
            axs[k].plot(x[0:i+1], df.loc[0:i, l], c=colors[k],
                        label=l+' scored in season')
            axs[k].set_title(l+' scored in season')
            # axs[k].legend(loc='best')
    
    anim = FuncAnimation(fig, animate, frames=9, repeat=False) 
    
    # anim.save('subplots_ani.gif', writer='pillow')
    
    plt.show()
    

    我知道你指定了MatpTLIB,但是你可以考虑用类似的方式来表达。我试过你的代码,但是图是空的。有没有关于我可能在哪里犯了错误的建议/你尝试了从数据到代码结尾的所有方法?我找到了答案。我给的名单上的名字比我给的名字都错了。我的错,图表移动了吗?如果它移动了,请接受答案。图形没有移动。我一直在想办法,但到目前为止还做不到。任何建议。但其余的作品都是精细的,副插图印刷得很精确