2016-01-22 4 views
0

Я хочу увеличить, например, центральную часть сюжета, но у меня есть некоторые проблемы. Я хочу сделать что-то подобное, но только с простой строкой. Как я могу это сделать? enter image description here У меня есть такой кусок кода:Как увеличить часть графика Matplolib

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 говорит:

/usr/bin/python2.7 "/home/kenenbek/Documents/Pycharm Projects/PycharmProjects/Multi-Agent/vizualization.py" 
/usr/local/lib/python2.7/dist-packages/matplotlib/font_manager.py:273: UserWarning: Matplotlib is building the font cache using fc-list. This may take a moment. 
    warnings.warn('Matplotlib is building the font cache using fc-list. This may take a moment.') 
Traceback (most recent call last): 
    File "/home/kenenbek/Documents/Pycharm Projects/PycharmProjects/Multi-Agent/vizualization.py", line 55, in <module> 
    origin="lower") 
    File "/usr/local/lib/python2.7/dist-packages/matplotlib/__init__.py", line 1812, in inner 
    return func(ax, *args, **kwargs) 
    File "/usr/local/lib/python2.7/dist-packages/matplotlib/axes/_axes.py", line 4947, in imshow 
    im.set_data(X) 
    File "/usr/local/lib/python2.7/dist-packages/matplotlib/image.py", line 449, in set_data 
    raise TypeError("Image data can not convert to float") 
TypeError: Image data can not convert to float 

ответ

1

Да, вы можете сделать это с сюжетом, который не является изображением. Check this post для примера.

В вашем случае, я думаю, что проблема заключается в создании списка в качестве изображения.

Проверьте этот код для примера, который работает для imshow или countourf (тот, который используется здесь).

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

1

Я не совсем уверен, что если вы хотите построить изображение, или контуры. Однако здесь приведена версия для данных типа ndarray. Вы можете легко преобразовать любое текстовое изображение, которое имеет только одноканальные (яркостные) значения, в ndarray, делая image = numpy.genfromtxt(fname=file). Мой код был быстро получен от 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() 
Смежные вопросы