代码之家  ›  专栏  ›  技术社区  ›  3kstc

带有自定义词典的MatPlotLib转换为图形

  •  0
  • 3kstc  · 技术社区  · 5 年前

    问题:

    list of ~108 dictionaries named list_of_dictionary 我想用Matplotlib生成线图。

    {'price': [59990, 
               59890,
               60990,
               62990, 
               59990, 
               59690], 
     'car': '2014 Land Rover Range Rover Sport', 
     'datetime': [datetime.datetime(2020, 1, 22, 11, 19, 26), 
                  datetime.datetime(2020, 1, 23, 13, 12, 33), 
                  datetime.datetime(2020, 1, 28, 12, 39, 24), 
                  datetime.datetime(2020, 1, 29, 18, 39, 36), 
                  datetime.datetime(2020, 1, 30, 18, 41, 31), 
                  datetime.datetime(2020, 2, 1, 12, 39, 7)]
    }
    

    了解字典:

    这个 car 2014路虎揽胜运动版

    • 59990 datetime.datetime(2020, 1, 22, 11, 19, 26)
    • 59890 datetime.datetime(2020, 1, 23, 13, 12, 33)
    • 60990 datetime.datetime(2020, 1, 28, 12, 39, 24)
    • 62990 datetime.datetime(2020, 1, 29, 18, 39, 36)
    • datetime.datetime(2020, 1, 30, 18, 41, 31)
    • 59690 datetime.datetime(2020, 2, 1, 12, 39, 7)

    问题:

    有了这种结构,我们怎么能创造出 mini-graphs with matplotlib

    其中每个迷你图将具有:

    • 图的标题 汽车
    • x轴 datetime
    • y轴 price

    我所做的:

    df = pd.DataFrame(list_of_dictionary)
    df = df.set_index('datetime')
    print(df)
    

    我不知道以后该怎么办。。。

    我读了很多遍,但读得越多,我就越困惑:(。

    0 回复  |  直到 5 年前
        1
  •  0
  •   Diziet Asahi    5 年前

    我不知道在一个人身上画那么多情节是否明智。您必须做出一些选择,以便能够在页面上安装所有的轴装饰(标题、轴标签、刻度标签等)。

    但基本思路是:

    car_data = [{'price': [59990, 
               59890,
               60990,
               62990, 
               59990, 
               59690], 
     'car': '2014 Land Rover Range Rover Sport', 
     'datetime': [datetime.datetime(2020, 1, 22, 11, 19, 26), 
                  datetime.datetime(2020, 1, 23, 13, 12, 33), 
                  datetime.datetime(2020, 1, 28, 12, 39, 24), 
                  datetime.datetime(2020, 1, 29, 18, 39, 36), 
                  datetime.datetime(2020, 1, 30, 18, 41, 31), 
                  datetime.datetime(2020, 2, 1, 12, 39, 7)]
    }]*108
    
    fig, axs = plt.subplots(11,10, figsize=(20,22)) # adjust figsize as you please
    
    for car,ax in zip(car_data, axs.flat):
        ax.plot(car["datetime"], car['price'], '-')
        ax.set_title(car['car'])
    

    理想情况下,所有轴可以共享相同的x轴和y轴,因此标签只能位于最左侧和最底部的轴上。如果您添加 sharex=True sharey=True subplots() :

    fig, axs = plt.subplots(11,10, figsize=(20,22), sharex=True, sharey=True) # adjust figsize as you please