Автоматическая ось Matplotlib дает неожиданный результат - PullRequest
0 голосов
/ 01 апреля 2019

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

Вот некоторый код:

import numpy as np
import numpy.polynomial.polynomial as poly
import matplotlib.pylab as plot

# pass in same sized arrays x, y, and z, returns fit of x to z and y to z 
def fitData(x, y, z): 
    x_coefs = poly.polyfit(x, z, 1)
    xfit = poly.Polynomial(x_coefs)    # instead of np.poly1d
    y_coefs = poly.polyfit(y, z, 3)
    yfit = poly.Polynomial(y_coefs)    # instead of np.poly1d
    return xfit, yfit 

x = [3.08,  3.1 ,  3.12,  3.14,  3.16,  3.18,  3.2 ,  3.22,  3.24, 
     3.26,  3.28,  3.3 ,  3.32,  3.34,  3.36,  3.38,  3.4 ,  3.42, 
     3.44,  3.46,  3.48,  3.5 ,  3.52,  3.54,  3.56,  3.58,  3.6 , 
     3.62,  3.64,  3.66,  3.68]

y = [0.000857,  0.001182,  0.001619,  0.002113,  0.002702,  0.003351,
    0.004062,  0.004754,  0.00546 ,  0.006183,  0.006816,  0.007362,
    0.007844,  0.008207,  0.008474,  0.008541,  0.008539,  0.008445,
    0.008251,  0.007974,  0.007608,  0.007193,  0.006752,  0.006269,
    0.005799,  0.005302,  0.004822,  0.004339,  0.00391 ,  0.003481,
    0.003095]

z = np.linspace(0, 1, num=len(x)) # create as many z points as input data 

xfit, yfit = fitData(x, y, z)

ax1 = plot.subplot(1, 2, 1)
plot.title("X position")
plot.xlabel("Z (ft)")
plot.ylabel("X (ft)")
ax1.plot(z, xfit(z))

ax2 = plot.subplot(1, 2, 2)
plot.title("Y position")
plot.xlabel("Z (ft)")
plot.ylabel("Y (ft)")
ax2.plot(z, yfit(z))

plot.tight_layout()
plot.show() 

А вот мои результирующие графики:

enter image description here

Как вы можетевидите, диапазон на шкале масштаба X, кажется, работает в обратном направлении, а масштаб графика y находится далеко.У кого-нибудь есть идеи, почему это может происходить?

1 Ответ

1 голос
/ 02 апреля 2019

В общем, я предполагаю, что Matplotlib знает диапазон ваших данных, поэтому я бы начал с просмотра данных, которые он выводит.Глядя на данные x, y-перехват должен быть 3,08, тогда как x_coefs равен array([-5.13333333, 1.66666667], так что ваши функции подгонки как-то отключены (ipython или print (x_coefs) - ваш друг здесь).

Вы должны повернуть вспятьx и z в x_coefs = poly.polyfit(x, z, 1), аналогично для y_coefs.

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