当我尝试使用背景数据和拟合线创建半对数图时,拟合线最终看起来完全不稳定。
import numpy as np
import matplotlib.pyplot as plt
k=0
for i in np.arange(0,len(emceeredshifts),7):
zbin=emceeredshifts[i+1]
lowradius = radius[(redshift <= (zbin + halfwidth)) & (redshift >= (zbin - halfwidth)) & (radius > 1) & (radius<20) &(mass>10.5)].flatten()
lowmass = mass[(redshift <= (zbin + halfwidth)) & (redshift >= (zbin - halfwidth)) & (radius > 1) & (radius<20)&(mass>10.5)].flatten()
if len(lowradius)>0:
lowfit = np.polyfit(lowmass, lowradius, 1)
lowlin,lowinter=np.poly1d(lowfit)
lowbestfit = lowinter + lowlin * (lowmass )
plt.plot( lowmass, lowbestfit, color=rainbowcolors[k], label=str(zbin))
plt.scatter( lowmass, lowradius, color=rainbowcolors[k], marker='.', alpha=.2, edgecolor='none')
k+=1
plt.legend(loc='lower right')
plt.title("Galaxy radius vs mass\nlinear mcmc mass predictions")
plt.xlabel("Log $M_\odot$")
plt.ylabel("Physical radius (kpc)")
plt.ylim(2,15)
plt.xlim(10.6,11.8)
plt.yscale('log')
plt.show()
这是有缺陷的半日志结果。
这是我删除日志比例时得到的结果。当y轴是线性时,线条看起来像线条,数据看起来像数据。
出了什么问题?
答案 0 :(得分:3)
您是否看过用于绘制这些线条的数组的内容?我怀疑他们没有排序,所以mpl正在点之间来回画线。在线性空间中,这只是沿着同一条线绘制,所以你看不到它,但在对数空间中,由于曲线,它是显而易见的。
我认为这个最小的例子证明了这个问题:
import numpy as np
import matplotlib.pyplot as plt
x = np.random.rand(1000)
y = x.copy()
fig,(ax1,ax2,ax3) = plt.subplots(3,figsize=(7,7))
fig.subplots_adjust(hspace=0.3)
ax1.plot(x,y)
ax1.set_title('linear')
ax2.plot(x,y)
ax2.set_yscale('log')
ax2.set_title('log, unsorted')
ind=np.argsort(x)
ax3.plot(x[ind],y[ind])
ax3.set_yscale('log')
ax3.set_title('log, sorted')
plt.show()