首页 > 解决方案 > 如何在同一图表内缩放图表的一部分

问题描述

首先,我的问题在这些帖子中得到了部分回答(如何通过 Matplolib 缩放绘图的一部分Matplotlib/Pandas: Zoom Part of a Plot with Time Series),但我不能在那里发表评论,因为我是新手在社区上,并且没有权限这样做。

所以,这么说,我的代码正在生成这个图表: 在此处输入图像描述

正是我想要的,但是缩放太小了,当我改变缩放时,框的纵横比会按比例变化。对于 8 倍变焦:

在此处输入图像描述

我试图改变轴的纵横比,但不起作用,我想要的缩放非常大,以捕捉接近零的线条波动:

在此处输入图像描述

除此之外,代码正在绘制与原始线条不同颜色的缩放。当然,我可以注意到这是因为我制作了两次情节,一次用于斧头,另一次用于斧头。我怎样才能解决这个问题?

from mpl_toolkits.axes_grid1.inset_locator import zoomed_inset_axes 
from mpl_toolkits.axes_grid1.inset_locator import mark_inset

fig=plt.figure()
sns.set_style('whitegrid', {'legend.frameon':True})
sns.set_palette("deep")

fig= plt.subplots(figsize=(10,5))
ax=plt.axes()
ax.plot(me_re5200['y^+'],me_re5200['U'],markevery=0.2,marker='o',label='$\\overline{u}$ em Re = 5200')
ax.plot(me_re2000['y^+'],me_re2000['U'],markevery=0.3,marker='o',label='$\\overline{u}$ em Re = 2000')
ax.plot(me_re5200['y^+'],me_re5200[' W'],markevery=0.2,marker='o',label='$\\overline{w}$ em Re = 5200')
ax.plot(me_re2000['y^+'],me_re2000['W'],markevery=0.3,marker='o',label='$\\overline{w}$ em Re = 2000')

plt.xscale('symlog')
plt.grid(True)
plt.ylabel("$U^+$")
plt.xlabel('$y^{+}$')
plt.xlim(1,None)
plt.legend(frameon=True,edgecolor='grey',loc=6)

x1,x2=30,80
y1,y2=-1,1

axins=zoomed_inset_axes(ax, 2,loc='center right') # 2 = zoom
axins.plot(me_re5200['y^+'],me_re5200[' W'],markevery=0.2,marker='o')
axins.plot(me_re2000['y^+'],me_re2000['W'],markevery=0.3,marker='o')
plt.xscale('symlog')

axins.axis([x1, x2, y1, y2])
plt.xticks(visible=False)
plt.yticks(visible=True)
mark_inset(ax, axins, loc1=2, loc2=4, fc="none", ec="0.5")
plt.draw()
plt.show()

标签: pythonmatplotlibzooming

解决方案


推荐阅读