Это возможно в пределах одной оси, как сказано в комментариях выше.

аюсь построить данные и функции с помощью Matplotlib 2.0 под Python 2.7.

Значения x функции меняются со временем, и x сначала уменьшается до определенного значения, а затем снова увеличивается.

Если функция построена в зависимости от времени, она показывает функцию, подобную графику данных во времени

Мне нужна такая же эволюция оси х для построения графиков против реальных значений х. К сожалению, поскольку значения x одинаковы для обеих частей до и после, оба значения смешиваются вместе. Это дает мне неправильный график данных:

В этом примере это означает, что мне нужно, чтобы ось X начиналась со значения 2,4 и уменьшалась до 1,0, а затем снова увеличивалась до 2,4. Клянусь, я обнаружил, что это возможно, но, к сожалению, я не могу найти след об этом снова.

 Paddy12 нояб. 2017 г., 14:31
пожалуйста, добавьте сюжет в тело вопроса.
 Jakub Cerny12 нояб. 2017 г., 14:39
К сожалению, мне не хватает репутации для этого.
 ImportanceOfBeingErnest12 нояб. 2017 г., 14:56
Было бы хорошо иметьМинимальный, полный и проверяемый пример вопроса. Решение состоит в том, чтобы отменить (умножить на (-1)) значения, которые должны быть в левой части1.0 в этом случае. Как это можно сделать, зависит от ваших данных и того, как они хранятся.

Ответы на вопрос(2)

енных интервалов отдельно на каждую ось.

например, если у вас есть следующие данные:

myX = np.linspace(1,2.4,100)
myY1 = -1*myX
myY2 = -0.5*myX-0.5
plt.plot(myX,myY, c='b')
plt.plot(myX,myY2, c='g')

вместо этого вы можете создать два вспомогательных графика с общей осью Y и без пробелов между двумя осями, построить каждый интервал независимо друг от друга и, наконец, настроить пределы одной из ваших осей X, чтобы изменить порядок точек.

fig, (ax1,ax2) = plt.subplots(1,2, gridspec_kw={'wspace':0}, sharey=True)
ax1.plot(myX,myY1, c='b')
ax2.plot(myX,myY2, c='g')
ax1.set_xlim((2.4,1))
ax2.set_xlim((1,2.4))

 Jakub Cerny12 нояб. 2017 г., 15:19
Это кажется очень хорошим решением, даже мне все еще интересно, возможно ли это сделать в пределах одного топора.
 ImportanceOfBeingErnest12 нояб. 2017 г., 15:20
Это возможно в пределах одной оси, как сказано в комментариях выше.

должно быть инъективное отображение числовой линии на единицы оси. Поэтому изменение диапазона данных на самом деле не вариант (по крайней мере, когда цель состоит в том, чтобы все было просто).

Следовательно, было бы хорошо сохранить исходные числа и менять только галочки и метки на оси. Например. Вы могли бы использоватьFuncFormatter чтобы сопоставить оригинальные номера с

np.abs(x-tp)+tp

гдеtp будет поворотным моментом.

import numpy as np
import matplotlib.pyplot as plt
import matplotlib.ticker

x = np.linspace(-10,20,151)
y = np.exp(-(x-5)**2/19.)

plt.plot(x,y)

tp = 5
fmt = lambda x,pos:"{:g}".format(np.abs(x-tp)+tp)
plt.gca().xaxis.set_major_formatter(matplotlib.ticker.FuncFormatter(fmt))

plt.show()

 Jakub Cerny12 нояб. 2017 г., 16:23
Это отличное решение, спасибо!

Ваш ответ на вопрос