【问题标题】:Plot csv - define legend labels绘制 csv - 定义图例标签
【发布时间】:2016-07-04 07:12:28
【问题描述】:

我创建了一个 csv 文件(在 pandas 和朋友的帮助下),就像图片中的那样。

现在我需要绘制这个文件。 第一列是时间,应该用于 x 数据。剩下的是 y 数据。

对于图例,我只想将第一行用于标签,例如“T_HS_Netz_03”用于第二列。

不知道怎么做。

我的第一次尝试:

csv_data = pd.read_csv('file', header=[0, 1], delimiter=';')
ax = csv_data.plot(legend=True)
plt.legend(bbox_to_anchor=(0., 1.0, 1.0, 0.), loc=3, ncol=2, mode="expand")
plt.show()

但这也包括标签中的第二行,并且 x 刻度与数据不匹配 (0.9 - 3.2)。

第二次尝试:

csv_data = pd.read_csv('file', header=[0, 1], delimiter=';')
x =csv_data.iloc[1:, [0]]
y = csv_data.iloc[1:, 1:]
plt.legend()
plt.plot(x, y)

这不显示任何标签

结果图应该是这样的

谢谢

【问题讨论】:

    标签: python pandas matplotlib


    【解决方案1】:

    您必须使用示例中的 numpy 打开您的 cvs 文件。然后,您可以绘制列:

    import numpy as np
    import matplotlib.pyplot as plt
    
    data = np.genfromtxt("file", delimiter="", dtype=[("time", "f4"), ("column1", "f8"), ("column2", "f8")])
    
    figure_1 = plt.plot(data['time'], data['column1'])
    
    figure_2 = plt.plot(data['time'], data['column2'])
    
    plt.legend(loc='upper right')
    plt.xlabel('data')
    plt.ylabel('time')
    
    plt.show()
    

    你应该得到好的结果;)

    【讨论】:

    • 谢谢。如前所述,我设法绘制了文件。问题实际上是线条的标签。在传说中,我希望它们是“T_HS_Netz_03”和“T_NS_EZA_direkt_Trafo”。标签会随着不同的文件而变化,就像列数一样。因此,不同的 csv 文件可能有 3 个带有不同标签的附加列。
    • @bademaister 我编辑了我的脚本和情节。但我也想看看你的剧本..
    • @bademaister 我不知道您对第二个脚本更确切的要求是什么。 x 和 y 标签?
    • 没错。我希望图例显示每列的相应标签。我第一次尝试得到的是“T_HS_Netz_03, u1. Betrag in p.u.)”。第二次尝试没有显示任何标签,因为我没有提供任何标签。但我不知道我是如何设法只提供第一行标签的。问题是,我对 pandas/matplotlib 很陌生
    • 我终于测试了你的代码。这对我来说没有任何传说。不过情节本身是正确的。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-02
    • 1970-01-01
    • 2022-10-06
    • 2014-01-06
    相关资源
    最近更新 更多