2016-08-19 3 views
0

Я работаю на двух участках: контур участка на вершине и ху участок на нижней contour plotконтурный график с нелинейными х масштаба

Контур участка производится с помощью следующей строки

plt.imshow(df, extent = [xmin, xmax, ymin, ymax]) 

, а х, у участок

xyplot = df.mean() 
plt.plot(x, xyplot) 

И должны быть выровнены по вертикали к контуру участок на вершине, но ху участок имеет нелинейную шкалу х. На следующем рисунке показана ось x в зависимости от ее индекса enter image description here

Поскольку я не могу предоставить массив переменной «степени» метода «imshow», я не могу предоставить некоторую шкалу x в контуре сюжет. Как я могу сделать некоторую нелинейную шкалу на графике контура так, чтобы два графика выровнялись по вертикальной оси?

ответ

1

Вы можете использовать scipy.interpolate.interp2d, чтобы интерполировать изображение на обычной сетке. Вот пример:

import numpy as np 
import pylab as pl 

x = np.linspace(0, 1, 100) 
x2 = x ** 2 
y = np.linspace(0, 1, 200) 

X, Y = np.meshgrid(x, y) 
X2, Y2 = np.meshgrid(x2, y) 
Z = np.sin(10 * (X**2 + Y**2)) 
Z2 = np.sin(10 * (X2**2 + Y2**2)) 

from scipy import interpolate 

i2d = interpolate.interp2d(x2, y, Z2) 
Zi = i2d(x, y) 

fig, axes = pl.subplots(1, 3, figsize=(12, 4)) 
extent = [0, 1, 0, 1] 
axes[0].imshow(Z, extent=extent) 
axes[1].imshow(Z2, extent=extent) 
axes[2].imshow(Zi, extent=extent) 

выход:

enter image description here

слева: массив рассчитывается на регулярной сетке. центр: массив, рассчитанный не на регулярной сетке. right: интерполировать результат центральной матрицы на регулярной сетке.

Смежные вопросы