【问题标题】:Creating multiple plots from a list从列表中创建多个图
【发布时间】:2019-04-09 08:42:39
【问题描述】:

我有一个使用 matplotlib 的 Python 列表,看起来像这样:

[['125Hz', 0, 55.9], 
['125Hz', 30, 54.9], 
['125Hz', 60, 52.2], 
['125Hz', 90, 51.5], 
['125Hz', 120, 51.1], 
['125Hz', 150, 49.6], 
['125Hz', 180, 50.4], 
['250Hz', 0, 57.0], 
['250Hz', 30, 56.1], 
['250Hz', 60, 53.8], 
['250Hz', 90, 52.2], 
['250Hz', 120, 50.7], 
['250Hz', 150, 48.2], 
['250Hz', 180, 48.1], 
['500Hz', 0, 58.0],
....
]

我需要每个出现频率的单独曲线(例如125Hz, 250Hz...)。到目前为止我还没有找到解决方案。我还想在我的情节中使用频率字符串作为我的标签。

执行此类操作的最佳做​​法是什么?

编辑:它必须是一种动态方法,因为我事先不知道我会得到多少频率/图表。每个频率的项目也可能有所不同。

【问题讨论】:

    标签: python-3.x numpy matplotlib scipy


    【解决方案1】:

    处理这种表格数据的最佳方法是pandas,它内置了许多用于分组数据的功能。在你的情况下,这可能看起来像这样:

    import numpy as np
    import pandas as pd
    import matplotlib.pyplot as plt
    
    d = np.array([['125Hz', 0, 55.9], 
    ['125Hz', 30, 54.9], 
    ['125Hz', 60, 52.2], 
    ['125Hz', 90, 51.5], 
    ['125Hz', 120, 51.1], 
    ['125Hz', 150, 49.6], 
    ['125Hz', 180, 50.4], 
    ['250Hz', 0, 57.0], 
    ['250Hz', 30, 56.1], 
    ['250Hz', 60, 53.8], 
    ['250Hz', 90, 52.2], 
    ['250Hz', 120, 50.7], 
    ['250Hz', 150, 48.2], 
    ['250Hz', 180, 48.1], 
    ['500Hz', 0, 58.0]])
    
    # Create a pandas dataframe from your numpy array:
    df = pd.DataFrame(d, columns = ['freq','x','y'])
    
    # cast x and y to numeric types:
    df[['x','y']] = df[['x','y']].astype(float)
    
    # Group by frequency, and plot your variables
    for freq, data in df.groupby('freq'):
        plt.plot(data.x, data.y, label=freq)
    
    plt.legend()
    
    plt.show()
    

    使用您的数据,您将获得如下信息:

    【讨论】:

    • 非常感谢!这正是我想要的!
    猜你喜欢
    • 2015-09-27
    • 1970-01-01
    • 1970-01-01
    • 2013-06-23
    • 1970-01-01
    • 2020-08-04
    • 1970-01-01
    • 2017-03-30
    • 2020-09-04
    相关资源
    最近更新 更多