Построение кривой на полях фигуры - PullRequest
0 голосов
/ 27 ноября 2018

У меня есть график функции f, которая прерывистым образом зависит от времени.Точнее, он имеет определенное поведение для t1<=t<t2 и другого повсюду, как в примере ниже

import matplotlib.pyplot as plt
import numpy as np
from pylab import *

l1=1.
l2=5.
t1=20.
t2=50.
tf=120.
def f1(t):
    if t<t1:
        L = l1
    elif t1<=t<t2:
        L = l2
    else:
        L=l1
    g=L*t
    return g
a=np.linspace(0.,100,1000)
values1=map(f1,a)
fig1=plt.figure(1)
plt.plot(a,values1,color='red')
plt.show()

График импульса следующий:

def f2(t):
    if t<t1:
        L = l1
    elif t1<=t<t2:
        L = l2
    else:
        L=l1
    return L
values2=map(f2,a)
fig2=plt.figure(2)
plt.plot(a,values2,color='blue')

plt.show()

Я хочусделать фигуру с красной кривой в качестве основного графика и небольшой вставкой в ​​верхнем поле фигуры, показывающей синюю кривую, без какой-либо оси x или оси y, просто чтобы зритель понял, когда происходит изменение параметра L случается.

Ответы [ 2 ]

0 голосов
/ 27 ноября 2018

Я думаю, что сюжеты будут делать то, что вы хотите.Если вы уменьшите верхний участок и уберете отметки / метки, он будет выглядеть как на полях.Вот фрагмент кода, который устанавливает график.

f = plt.figure()
# Make 2 subplots arranged vertically with different ratios
(ax, ax2) = f.subplots(2,1, gridspec_kw={'height_ratios':[1,4]})

#remove the labels on your top subplot
ax.get_xaxis().set_visible(False)
ax.get_yaxis().set_visible(False)

ax.plot(a, f2(a))
ax2.plot(a, f1(a), 'r:') #red curve main plt

plt.show()

Я использовал этот код для построения нескольких синусоид, и он получился следующим образом:

enter image description here

Это то, что вы ищете?

0 голосов
/ 27 ноября 2018

Может быть, вы могли бы использовать inset_axes из mpl_toolkits.axes_grid1.inset_locator

См. Например: https://matplotlib.org/gallery/axes_grid1/inset_locator_demo.html

import matplotlib.pyplot as plt
from mpl_toolkits.axes_grid1.inset_locator import inset_axes

fig, axs = plt.subplots(1, 1)

# Create inset of width 1.3 inches and height 0.9 inches
# at the default upper right location
axins = inset_axes(axs, width='20%', height='20%', loc=2)

И затем отобразить ваши данные в axins:

axins.plot(data)

Вы также можете отключить галочки и ярлыки, используя:

axins.axes.get_yaxis().set_visible(False)
axins.axes.get_xaxis().set_visible(False)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...