代码之家  ›  专栏  ›  技术社区  ›  jayko03

熊猫如何有不同颜色的线条图

  •  0
  • jayko03  · 技术社区  · 6 年前

    index block array_size  time
    0   2   100 0.102710
    1   2   1000    0.356194
    2   2   10000   2.884903
    3   2   100000  28.484935
    4   2   1000000 293.656645
    5   2   8000000 91286.889516
    6   4   100 0.103323
    7   4   1000    0.347484
    8   4   10000   2.799290
    9   4   100000  27.3598
    

    enter image description here

    我想有不同的块(2和4)不同的值不同的颜色。(第二列)
    我的密码是 df.plot(x='array_size', y='time') 如何为每个变量设置不同的颜色?

    2 回复  |  直到 6 年前
        1
  •  2
  •   Jinhua Wang Matti John    4 年前

    你可以用一个简单的 groupby ,或者如果您愿意使用 seaborn hue

    import pandas as pd
    import seaborn as sns
    import numpy as np
    import matplotlib.pyplot as plt
    
    fig, ax = plt.subplots(figsize=(8,4))
    
    for idx, gp in df.groupby('block'):
        gp.plot(x='array_size', y='time', ax=ax, label=idx)
    plt.show()
    

    enter image description here

    (至少0.9)您可以:

    sns.lineplot(data=df, x='array_size', y='time', hue='block')
    

    'blocks' 标准的颜色循环器是不会削减它的。你可以很容易地调整 ax.set_prop_cycle

    样本数据

    df = pd.DataFrame({'x': np.tile(np.arange(1,11,1),20),
                       'y': np.random.randint(1,25,200),
                       'block': np.repeat(np.arange(1,21,1),10)})
    

    fig, ax= plt.subplots(figsize=(8,4))
    
    colors = sns.color_palette("coolwarm", df.block.nunique())
    ax.set_prop_cycle('color', colors)
    
    for idx, gp in df.groupby('block'):
        gp.plot(x='x', y='y', ax=ax, legend=False)
    plt.show()
    

    enter image description here

        2
  •  1
  •   MNA    6 年前

    这样就可以了。

    import matplotlib.pyplot as plt
    
    for unq_value in df['block'].unique():
        mask = df['block'] == unq_value
        df_subset = df[mask]
        plt.plot(df_subset['array_size'], df_subset['time'])
    plt.show()
    

    在这里,我们在block列中找到唯一的值。然后为每个唯一值的数据帧子集,然后为数据帧的每个子集分别绘制。