首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Matplotlib分段图

Matplotlib分段图
EN

Stack Overflow用户
提问于 2022-03-24 07:11:07
回答 1查看 50关注 0票数 0

我有以下数据集:

代码语言:javascript
复制
   df = pd.DataFrame ({"a": [1,2,3,4,5,6,7,8,9,1,11,12,13,14,15,16,17,18,19,20], 
                'b':[1,2,3,4,50,60,70,8,9,10,110,120,130,140,150,16,17,18,19,20],
                'c':[np.nan,2.2,3.4,np.nan,40.9,60.2,np.nan,8.2,8.9,10.1,np.nan,120.2,
                     130.07,140.23,np.nan,16.054,17.20,18.1,np.nan,20.1],
               'd': [100, np.nan,np.nan, 500,np.nan, np.nan,500, 
                     np.nan,np.nan,np.nan,100, np.nan,np.nan, np.nan,500,
                     np.nan,np.nan, np.nan,100,np.nan  ]}
              )

我试图根据以下条件绘制数据:

在'd‘列的100到下一个100之间的

  1. ,我希望在x轴上有一个列'a’,在y轴上有'b‘和'c’的散点图。

那就是我将有三个不同的情节。第一次从索引0到10,第二次从索引10到索引18,第三次从18到20。(我可以用for循环生成这个)

  1. 在每个地块中,我想要基于'd‘列中位置500的分段线图,即对于索引0-3的第一幅图,从索引3-6另一条,从索引6-10,另一条线图。(我不能制作分段线图)

我使用的代码如下:

代码语言:javascript
复制
    index = index + [len(df)]
    index1 = index1 + [len(df)]

   for k in range (len(index)-1):
      x = df['a'][index[k] + 1:index[k+1]]
      y = df['c'][index[k]+ 1:index[k+1]]
      y1 = df['b'][index[k]+ 1:index[k+1]]

      plt.scatter(x, y)
      plt.plot(x, y1)
      plt.savefig('plot'+ str(k+1000) +'.png')
      plt.clf()

我的第一个图看起来是这样的:(但希望有三个分段的线图,而不是连续的(即索引0-3中的行不应该与3-6连接,等等)。

很抱歉有一个相当长的问题:)

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-03-24 07:32:34

预期的输出还不清楚,但以下是使用groupby将数据集分成组的一般策略

备选案文1:独立数字

代码语言:javascript
复制
group = df['d'].eq(100).cumsum()
for name, g in df.groupby(group):
    f,ax = plt.subplots()
    ax.scatter(g['a'], g['c'])
    ax.plot(g['a'], g['b'])
    f.savefig(f'figure_{name}.png')

备选案文2

代码语言:javascript
复制
ax = plt.subplot()
group = df['d'].eq(100).cumsum()
for name, g in df.groupby(group):
    ax.scatter(g['a'], g['c'])
    ax.plot(g['a'], g['b'], label=name)
ax.legend()

备选方案3

代码语言:javascript
复制
ax = plt.subplot()
group = df['d'].eq(100).cumsum()
for name, g in df.groupby(group):
    g = g.reset_index()
    ax.scatter(g.index+1, g['c'])
    ax.plot(g.index+1, g['b'])

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71598311

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档