Matplotlib Multi-Lined Plot с использованием файла CSV - PullRequest
0 голосов
/ 01 июля 2019

Я создал свой собственный аффинно-инвариантный алгоритм MCMC, используя два измерения, наклон и y-пересечение, а также используя 4-х ходовых. У меня есть все данные в CSV-файле, где есть два столбца m и b, а затем для каждой первой из четырех строк, он будет представлять первый ходок. Например, в приведенном ниже файле csv первый ходок представлен в 0-й, 4-й, 8-й и 12-й строках, а второй ходок представлен в 1-й, 5-й, 9-й и 13-й строках и т. Д. Ниже приведен фрагмент кода:

chain.csv

Я хочу создать сюжет, похожий на сюжет для спагетти или эволюции https://python -graph-gallery.com / 124-spaghetti-plot / , где каждый из участников представлен своей собственной линией а не весь столбец m и b изображен в виде их собственной линии. До сих пор у меня была функция, которая разделяет ходунки по строкам и столбцам по фреймам данных, но у меня возникают проблемы с отображением этих значений в виде нескольких строк.

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()

1 Ответ

2 голосов
/ 01 июля 2019

Чтобы построить эволюцию уклонов / пересечений, просто определите последовательность для вашей оси, например 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()
...