@may_1997

Как изменить масштаб поля рисования графика в Python?

если я, к примеру, буду рисовать функцию на отрезке от 0 до 1, а значения функции на этом отрезке будут огромными, то рисунок получается ужасным, в плане того, что я не знаю, как сделать так, чтобы окно рисования графика всегда было одного размера (чтобы единица измерения по оси у и по оси х не были равными)

axes.set_aspect("equal")
<- рисует масштаб один к одному

<source lang="python">
import math
import pylab
from matplotlib import mlab
import matplotlib.patches
import matplotlib.lines
import matplotlib.path

import random

n = 5
a = 100
b = 101
dx = 0.01             

k = [0] * (n+1);
t = [0] * (n+1);

def y(a):
     return(math.sqrt((a-100.5)*(a-100.5) + 1))               # <- функция

c = (b - a)/(n);                                   # <- равномерно
for j in range(0, n+1, 1):
     t[j] = a + j*c
     k[j] = y(t[j])

t.sort();
for i in range(n+1):
    k[i] = y(t[i])
    print(t[i], k[i])


def g(i, x):                                         # start of Lagrange
    l = 1;
    for j in range(len(t)):
        if i != j:
            l = l*(x - t[j])/(t[i] - t[j])
    return l
    
def f(x):
    y = 0;
    for i in range(len(t)):
        y = y + k[i]*g(i,x) 
    return y                                         #  end of Lagrange







xlist1 = mlab.frange (t[0], t[n], dx)
xlist = mlab.frange (a  , b  , dx)

ylist1 = [f(x) for x in xlist]
ylist2 = [y(x) for x in xlist]

pylab.plot (xlist, ylist1)
pylab.plot (xlist, ylist2)

def drawCircles (axes):
    for i in range(n+1):
        circle1 = matplotlib.patches.Circle((t[i], k[i]), radius=0.01, fill=True)
        axes.add_patch (circle1)

def kl(x):
     y = 0
     for i in range(0, n+1, 1):
          if x == t[i]:
               return k[i]
     for i in range(0, n, 1):
          if (x > t[i]) and (x < t[i+1]):
               y = ((x - t[i])*(k[i+1] - k[i]))/(t[i+1]-t[i]) + k[i]
     return y

ylist3 = [kl(x) for x in xlist1]
pylab.plot (xlist1, ylist3)              

ymax = max(ylist3)
ymin = min(ylist3)


axes = pylab.gca()
axes.set_aspect((b-a)/(ymax-ymin))


pylab.xlim (a-(b-a)/10, b+(b-a)/10)
pylab.ylim (ymin - abs(ymin - ymax)/10, ymax + abs(ymin - ymax)/10)


drawCircles (axes)

pylab.show()

</source>


ВОПРОС ЗАКРЫТ

нужно было лишь написать вместо

axes.set_aspect((b-a)/(ymax-ymin))

axes.set_aspect(a,b,c,d), где а,b,с и d меняются от 0 до 1 и задают отпступ слева, снизу, ширину и высоту соотв.
  • Вопрос задан
  • 4499 просмотров
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы