【问题标题】:Plot list of list 3 values绘制列表 3 值的列表
【发布时间】:2021-07-25 05:27:00
【问题描述】:

我有这个列表列表

c = [[[1.0, 1.0000000000000002, 6154.0],
  [2.0, 0.0, 6154.0],
  [3.0, -0.9999999999999997, 6154.0],
  [4.0, 0.3809523809523809, 6154.0],
  [5.0, 0.0, 6154.0]],
 [[1.0, 1.0000000000000002, 3720.0],
  [2.0, 0.07407407407407404, 3720.0],
  [3.0, 1.0, 3720.0],
  [4.0, 1.0, 3720.0]],
 [[1.0, -1.0000000000000009, 17139.0]],
 [[1.0, -1.0000000000000009, 16149.0]],
 [[1.0, 1.0, 4075.0], [2.0, -0.999999999999999, 4075.0]],
 [[1.0, 0.0, 21445.0],
  [2.0, 1.0000000000000002, 21445.0],
  [3.0, 0.0, 21445.0],
  [4.0, 0.9999999999999998, 21445.0],
  [5.0, 0.0, 21445.0],
  [6.0, 1.0, 21445.0],
  [7.0, 0.0, 21445.0]]]

对于每个列表,我想使用前两个值绘制散点图,并将第三个值用于图例。当我只有两个值时,在这种情况下:

c1 = c = [[[1.0, 1.0000000000000002],
  [2.0, 0.0],
  [3.0, -0.9999999999999997],
  [4.0, 0.3809523809523809],
  [5.0, 0.0]],
 [[1.0, 1.0000000000000002],
  [2.0, 0.07407407407407404],
  [3.0, 1.0],
  [4.0, 1.0]],
 [[1.0, -1.0000000000000009]],
 [[1.0, -1.0000000000000009]],
 [[1.0, 1.0], [2.0, -0.999999999999999]],
 [[1.0, 0.0],
  [2.0, 1.0000000000000002],
  [3.0, 0.0],
  [4.0, 0.9999999999999998],
  [5.0, 0.0],
  [6.0, 1.0],
  [7.0, 0.0]]]

我可以使用以下代码绘制列表列表:

for i in c1:
    plt.plot(*zip(*i), 'o-')
plt.show()

如何修改上面的代码?要达到相同的结果,但使用图例的第三个值?或者你知道如何使用 plotly.express 来制作情节吗?

【问题讨论】:

    标签: python pandas list matplotlib plotly


    【解决方案1】:

    你可以用更简单的方式来做:

    for i in c:
        plt.plot(*zip(*[j[:2] for j in i] ), 'o-')
    plt.gca().legend([i[0][2] for i in c])
    plt.show()
    

    您可以使用 plt.gca() 访问坐标区的实例。我使用列表推导从原始列表c 中检索用于绘图和图例的值。 下面是带有图例的结果图:

    【讨论】:

      【解决方案2】:

      使用 plotly figure,您可以循环遍历列表并使用 name 分别绘制每个子列表:

      import plotly.graph_objs as go
      fig = go.Figure()
      for lst in c:
          x, y, g = zip(*lst)
          fig.add_trace(go.Scatter(x=x, y=y, name=g[0]))
      
      fig.show()
      

      【讨论】:

        【解决方案3】:

        我不知道情节部分,但这是为了在情节上显示图例:

        c1 = list(map(lambda x: list(map(lambda y: y[:2], x)), c))
        legend = list(map(lambda x: x[0][-1], c))
        for i, lbl in zip(c1, legend):
            plt.plot(*zip(*i), 'o-', label=lbl)
        plt.legend(loc="upper left")
        plt.show()
        

        【讨论】:

          猜你喜欢
          • 2020-11-10
          • 2020-12-25
          • 1970-01-01
          • 1970-01-01
          • 2020-02-04
          • 1970-01-01
          • 2021-04-06
          • 1970-01-01
          • 2011-12-24
          相关资源
          最近更新 更多