使用CSV-fi的Matplotlib多重打印

2024-05-28 20:32:49 发布

您现在位置:Python中文网/ 问答频道 /正文

我已经创建了我自己的MCMC仿射不变算法使用二维,斜率和y截距,也使用4个步行者。我在csv文件中有所有的数据,其中有两列m和b,然后对于四行中的每一行,它将代表第一个walker。例如,在下面的csv文件中,第一个walker在第0、第4、第8和第12行中表示,而第二个walker在第1、第5、第9和第13行中表示,依此类推。下面是它的一个片段:

chain.csv

我想创建一个类似意大利面条或进化图https://python-graph-gallery.com/124-spaghetti-plot/的图,其中每个步行者都用自己的线来表示,而不是用m和b的整列作为自己的线来表示。到目前为止,我有一个按数据帧按行和列分隔walker的函数,但是我很难将这些值绘制为多行。你知道吗

def make_evo_plot(df):
   w1m = df['m'][0::4] #walker1 m
   w1b = df['b'][0::4] #walker1 b
   w2m = df['m'][1::4] #walker2 m
   w2b = df['b'][1::4] #walker2 b
   w3m = df['m'][2::4] #walker3 m
   w3b = df['b'][2::4] #walker3 b
   w4m = df['m'][3::4] #walker4 m
   w4b = df['b'][3::4] #walker4 b
   fig,ax = plt.subplots()
   plt.plot(w1m)
   plt.plot(w2m)
   plt.plot(w3m)
   plt.plot(w4m)
   ax.plot(w1b,w2b,w3b,w4b)
   plt.show()

根据这段代码,我的情节是这样的: bad plot

非常感谢您对绘制数据的任何帮助!!你知道吗

更新: 我试着做下面的代码,但是我得到了ValueError: x and y must have same first dimension, but have shapes (0,) and (8750,)

def make_evo_plot(df):
  w1m = df['m'][0::4] #walker1 m
  w1b = df['b'][0::4] #walker1 b
  w2m = df['m'][1::4] #walker2 m
  w2b = df['b'][1::4] #walker2 b
  w3m = df['m'][2::4] #walker3 m
  w3b = df['b'][2::4] #walker3 b
  w4m = df['m'][3::4] #walker4 m
  w4b = df['b'][3::4] #walker4 b
  fig,ax = plt.subplots()
  plt.plot(w1m)
  plt.plot(w2m)
  plt.plot(w3m)
  plt.plot(w4m)
  ax.plot(w1b,w2b,w3b,w4b)
  plt.show()

Tags: dfplotpltwalkerw3mwalker3w2bw3b
1条回答
网友
1楼 · 发布于 2024-05-28 20:32:49

要绘制坡度/截距的演变,只需为轴定义一个序列,如x=np.arange(0,100,5),然后使用ax.plot(x, w1m)

def make_evo_plot(df):
   w1m = df['m'][0::4] #walker1 m
   w1b = df['b'][0::4] #walker1 b
   w2m = df['m'][1::4] #walker2 m
   w2b = df['b'][1::4] #walker2 b
   w3m = df['m'][2::4] #walker3 m
   w3b = df['b'][2::4] #walker3 b
   w4m = df['m'][3::4] #walker4 m
   w4b = df['b'][3::4] #walker4 b

   x = np.arange(0,2500,5) #Define a sequence of same length as your data

   fig,ax = plt.subplots()

   #To plot the evolution of the 4 slopes
   ax.plot(x,w1m)
   ax.plot(x,w2m)
   ax.plot(x,w3m)
   ax.plot(x,w4m)

   plt.show()

相关问题 更多 >

    热门问题