NonUniformImage с нелинейными осями - PullRequest
0 голосов
/ 15 февраля 2019

У меня есть изображение в неоднородной сетке, и я хочу построить его с одной из осей, масштабированных логарифмически.Это возможно для imshow, однако для этого требуются регулярно расположенные данные.Я могу нанести на график данные с нерегулярной сеткой с помощью NonUniformImage, однако настройка ax.set_xscale('log') влияет только на ось, а не на само изображение.

Этого можно достичь с помощью NonUniformImage или даже возможно привсе?Вот некоторый код, который показывает, что я имею в виду (верхняя строка imshow, нижняя NonUniformImage).

import numpy as np
import matplotlib.pyplot as plt 
from matplotlib.image import NonUniformImage

# Linear x array for cell centers:
x = np.linspace(1, 10, 10) 

# Highly nonlinear x array:
x2 = x**3

# Linear y-array
y = np.linspace(1, 10, 10) 
z = np.sqrt(x[np.newaxis, :]**2 + y[:, np.newaxis]**2)


fig, axs = plt.subplots(nrows=2, ncols=2)
fig.subplots_adjust(bottom=0.07, hspace=0.3)

# Uniform Grid, linear x-axis
ax = axs[0, 0]
im = ax.imshow(z, extent=(1, 10, 1, 10), aspect='auto',origin='lower')
ax.set_title("Uniform Grid, linear x-axis")

# Uniform Grid, log x-axis (image changes)
ax = axs[0, 1]
im = ax.imshow(z, extent=(1, 10, 1, 10),aspect='auto',origin='lower')
ax.set_xscale('log')
ax.set_title('Uniform Grid, log x-axis')

# Correct ticklabel formatting
from matplotlib.ticker import StrMethodFormatter, NullFormatter
ax.xaxis.set_major_formatter(StrMethodFormatter('{x:.0f}'))
ax.xaxis.set_minor_formatter(NullFormatter())

# NonUniform Grid, linear x-axis
ax = axs[1, 0]
im = NonUniformImage(ax, interpolation='nearest', extent=(1, 1000, 1, 10))
im.set_data(x2, y, z)
ax.images.append(im)
ax.set_xlim(1, 1000)
ax.set_ylim(1, 10) 
ax.set_title('NonUniform Grid, lin x-axis')

# NonUniform Grid, logarithmic x-axis (this doesn't work as intended)
ax = axs[1, 1]
im = NonUniformImage(ax, interpolation='nearest', extent=(1, 1000, 1, 10))
im.set_data(x2, y, z)
ax.images.append(im)
ax.set_xlim(1, 1000)
ax.set_ylim(1, 10) 
ax.set_xscale('log')
ax.set_title('NonUniform Grid, log x-axis')

plt.show()

Resulting figure

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...