如何用Matplolib缩放部分绘图

2024-04-20 11:10:49 发布

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

我想放大,例如,一个中心部分的情节,但我有一些问题。 我想做那样的事,但只需要简单的一句话。我怎么能做到呢? enter image description here 我有这样一段代码:

import matplotlib.pyplot as plt
import pickle
from mpl_toolkits.axes_grid1.inset_locator import zoomed_inset_axes
from mpl_toolkits.axes_grid1.inset_locator import mark_inset
import numpy as np

fig, ax = plt.subplots(figsize=[5,4])
extent = (0, 100, 0, 50)
xx = np.linspace(0, 100, 1000)
Z2 = [np.sin(x) for x in xx]
ax.imshow(Z2, extent=extent, interpolation="nearest",
          origin="lower")
axins = zoomed_inset_axes(ax, 6, loc=1) # zoom = 6
mark_inset(ax, axins, loc1=2, loc2=4, fc="none", ec="0.5")

plt.draw()
plt.show()

Python说:

^{pr2}$

Tags: fromimportasnppltaxextentmpl
2条回答

我不太确定你是要画一个图像,还是轮廓。但是这里是ndarray类型数据的版本。通过执行image = numpy.genfromtxt(fname=file),可以轻松地将任何只有单通道(亮度)值的文本图像转换为ndarray。我的代码很快从Basemap Inset Locators派生而来

    import matplotlib.pyplot as plt
    from mpl_toolkits.axes_grid1.inset_locator import zoomed_inset_axes
    from mpl_toolkits.axes_grid1.inset_locator import mark_inset
    from scipy import misc
    fig = plt.figure()
    ax = fig.add_subplot(111)

    image = misc.ascent()

    ax.imshow(image,extent=[0,512,0,512], aspect=(1))

    axins = zoomed_inset_axes(ax, 5, loc=1)
    axins.imshow(image, extent=[0,512,0,512],aspect=(1))
    axins.set_xlim(150, 200)
    axins.set_ylim(120, 170)
    plt.xticks(visible=False)
    plt.yticks(visible=False)

    mark_inset(ax, axins, loc1=2, loc2=4, fc="none", ec="0.5")
    plt.draw()
    plt.show()

是的,你可以用一个不是图像的情节来完成。Check this post示例。在

在你的例子中,我认为问题是试图把列表绘制成一个图像。在

请检查下面的代码以获得一个适用于imshowcountourf(此处使用的示例)的示例。在

import matplotlib.pyplot as plt
from mpl_toolkits.axes_grid1.inset_locator import zoomed_inset_axes
from mpl_toolkits.axes_grid1.inset_locator import mark_inset
import numpy as np

fig, ax = plt.subplots(figsize=(5,4))
extent = (0, 100, 0, 50)
x, y = np.mgrid[-5:5:100j, -5:5:100j]
z = np.sin(2*x)*np.sin(y**2)
ax.contourf(x, y, z, cmap="YlGnBu_r")
axins = zoomed_inset_axes(ax, 2, loc=1)
axins.contourf(x, y, z, cmap="YlGnBu_r")
axins.set_xlim(1, 2)
axins.set_ylim(1, 2)
plt.xticks(visible=False)
plt.yticks(visible=False)
mark_inset(ax, axins, loc1=2, loc2=4, fc="none", ec="0.5")
plt.draw()
plt.show()

enter image description here

相关问题 更多 >