我创建了自己的MCMC仿射不变算法,该算法使用两个维度(斜率和y截距)以及4个助步器。我将所有数据保存在一个csv文件中,其中有两列m和b,然后对于四行中的每一行,它都代表第一个行者。因此,例如,在下面的csv文件中,第一个walker表示在第0、4、8和12行,而第二个walker表示在第1、5、9和13行,依此类推。如下所示:
我想创建一个看起来像意大利面条或进化图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()
非常感谢您提供绘制数据的帮助!!
更新:
我尝试执行以下代码,但得到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()
答案 0 :(得分:2)
要绘制斜率/截距的演变,只需为轴定义一个序列,例如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()