【问题标题】:Plot with matplotlib from .csv file containing duplicate column names从包含重复列名的 .csv 文件中使用 matplotlib 绘图
【发布时间】:2017-06-19 14:29:18
【问题描述】:

我正在使用组合的 ID1 和 ID2 列绘制线条。在 .csv 文件中,ID1 和 ID2 编号可能会在某些时候重复。当 ID2 = 0 时,决定数据是否需要换行的方法是直接跟随。我希望程序将我在下面提供的示例数据识别为 2 个单独的行。

ID1 ID2  x  y
1   2    1  1
1   2    2  2
1   2    3  3
1   2    4  4 
1   0    5  5
...
1   2    1  3
1   2    2  5
1   2    3  7

现在,我的程序会将这些数据绘制为相同颜色的连续线。我需要一条不同颜色的新行,但即使 ID1 和 ID2 值重复,我也不知道如何过滤数据以开始新行。程序需要将 ID2 列中的“0”视为开始新行的信号。任何想法都会非常有帮助。

【问题讨论】:

    标签: python pandas user-interface matplotlib dataframe


    【解决方案1】:

    一个选项是找出零的 indizes 并循环它们以创建单独的 DataFrames 来绘制。

    u = u"""ID1 ID2  x  y
    1   2    1  1
    1   2    2  2
    1   2    3  3
    1   2    4  4 
    1   0    5  5
    1   2    1  3
    1   2    2  5
    1   2    3  7
    1   0    1  3
    1   2    2  4
    1   2    3  2
    1   2    4  1"""
    
    import io
    import pandas as pd
    import numpy as np
    import matplotlib.pyplot as plt
    
    df = pd.read_csv(io.StringIO(u), delim_whitespace=True)
    
    fig, ax = plt.subplots()
    
    inx = list(np.where(df["ID2"].values==0)[0]+1)
    inx = [0] + inx + [len(df)]
    for i in range(len(inx)-1):
        dff = df.iloc[inx[i]:inx[i+1],:]
        dff.plot(x="x", y="y", ax=ax, label="Label {}".format(i))
    
    plt.show()
    

    【讨论】:

      【解决方案2】:

      一种方法是使用cumsumseabornhue 绘图:

      temp_df = df.assign(line_no=df.ID2.eq(0).cumsum()).query('ID2 != 0')
      
      import seaborn as sns
      _ = sns.pointplot(x='x',y='y', hue='line_no',data=temp_df)
      

      或者使用 matplotlib:

      fig,ax = plt.subplots()
      for i in temp_df.line_no.unique():
          x=temp_df.query('line_no == @i')['x']
          y=temp_df.query('line_no == @i')['y']
          ax.plot(x,y)
      

      【讨论】:

      • 您缺少点 (5,5),即 ID2 列中为 0 的点。
      • @ImportanceOfBeingErnest Hrm... 我虽然 ID=0 是新行的“分隔符”,不应该被绘制。无论哪种方式。谢谢。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-11-15
      • 2016-07-03
      • 2019-06-26
      • 1970-01-01
      • 1970-01-01
      • 2012-11-12
      相关资源
      最近更新 更多