Я использую кусок кода (основанный на решении чужой задачи с учетом here), чтобы создать графики спектральных данных с двумя по оси x. Первый (нижний) находится в частотных единицах, второй (верхний) просто преобразован в единицы длины волны (длина волны = 3E8/частота). Это работало хорошо, пока я не обновил MPL до 1.4.2, после чего значения на верхней оси будут такими же, как и на нижней оси (см. Пример).Matplotlib Вторая ось x с преобразованными значениями
MWE (точная копия из списка рассылки MPL) является:
from matplotlib.transforms import Transform, BlendedGenericTransform, IdentityTransform
import matplotlib.pyplot as plt
from mpl_toolkits.axes_grid.parasite_axes import SubplotHost
import numpy as np
c = 3.e2
class Freq2WavelengthTransform(Transform):
input_dims = 1
output_dims = 1
is_separable = False
has_inverse = True
def transform(self, tr):
return c/tr
def inverted(self):
return Wavelength2FreqTransform()
class Wavelength2FreqTransform(Freq2WavelengthTransform):
def inverted(self):
return Freq2WavelengthTransform()
aux_trans = BlendedGenericTransform(Freq2WavelengthTransform(),
IdentityTransform())
fig = plt.figure(2)
ax_GHz = SubplotHost(fig, 1,1,1)
fig.add_subplot(ax_GHz)
ax_GHz.set_xlabel("Frequency (GHz)")
xvals = np.arange(199.9, 999.9, 0.1)
#make some test data
data = np.sin(0.03*xvals)
ax_mm = ax_GHz.twin(aux_trans)
ax_mm.set_xlabel('Wavelength (mm)')
ax_mm.set_viewlim_mode("transform")
ax_mm.axis["right"].toggle(ticklabels=False)
ax_GHz.plot(xvals, data)
ax_GHz.set_xlim(200, 1000)
plt.draw()
plt.show()
Это производит
Может ли один мне посоветовать, как решить эту проблему в MPL 1.4.2?
Возможный дубликат [Как добавить вторую ось x в matplotlib] (http://stackoverflow.com/q/10514315/2823755). Может быть, [принятый ответ] (http://stackoverflow.com/a/10517481/2823755) поможет. [ '' 'Pyplot.twiny()' ''] (http://matplotlib.org/api/pyplot_api.html#matplotlib.pyplot.twiny) – wwii