Как переставить участки так, чтобы одно было под другим? - PullRequest
0 голосов
/ 01 января 2019

Я пытаюсь закодировать два графика так, чтобы один график находился под другим.Тем не менее, мой код продолжает выравнивать два моих графика рядом друг с другом.Это мой код:

import numpy as np
from scipy.integrate import odeint
from numpy import sin, cos, pi, array
import matplotlib
from matplotlib import rcParams
import matplotlib.pyplot as plt
from pylab import figure, axes, title, show
import xlsxwriter

plt.style.use('ggplot')

def deriv(z, t):
    l = 0.25    #unextended length of the spring, in m
    m = 0.25       #mass of the bob, in kg
    k = 29.43      #spring constant, in Nm^-1
    g = 9.81    #gravitational acceleration, in ms^-2
    
    x, y, dxdt, dydt = z
    
    dx2dt2 = (l+x)*(dydt)**2 - k/m*x + g*cos(y)
    dy2dt2 = (-g*sin(y) - 2*(dxdt)*(dydt))/(l+x)
            #equations of motion
    
    return np.array([dxdt, dydt, dx2dt2, dy2dt2])


init = array([0, pi/2, 0, 0])
            #initial conditions (x, y, xdot, ydot)

time = np.linspace(0, 10, 1000)
            #time intervals (start, end, number of intervals)

sol = odeint(deriv, init, time)
            #solving the equations of motion

x = sol[:,0]
y = sol[:,1]

fig, (ax1, ax2) = plt.subplots(1, 2, sharex=True)

ax1.plot(time,x)
ax1.set_ylabel('hi')

ax2.plot(time,y)
ax2.set_ylabel('fds')

plt.plot()

но я продолжаю получать это в результате: enter image description here

Я пытался:

plt.subplot(x)
plt.subplot(y)
plt.show()

но я сталкиваюсь с этой ошибкой:

Traceback (most recent call last):
  File "/Users/cnoxon/Desktop/Python/Final code 2 copy 2.py", line 39, in <module>
    plt.subplot(x)
  File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/matplotlib/pyplot.py", line 1084, in subplot
    a = fig.add_subplot(*args, **kwargs)
  File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/matplotlib/figure.py", line 1367, in add_subplot
    a = subplot_class_factory(projection_class)(self, *args, **kwargs)
  File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/matplotlib/axes/_subplots.py", line 39, in __init__
    s = str(int(args[0]))
TypeError: only size-1 arrays can be converted to Python scalars
>>> 

Как мне решить одну из этих проблем?Альтернативные решения одинаково ценятся - у меня нет никаких предпочтений относительно того, как создаются графики;Я просто хочу, чтобы один был под другим.Спасибо!

1 Ответ

0 голосов
/ 01 января 2019

То, как числа работают в подпунктах , заключается в том, что сначала вы указываете количество строк, а затем количество столбцов.Чтобы иметь графики друг под другом, вам нужно 2 строки и 1 столбец.Следовательно, сначала вы должны написать 2, а затем 1 в plt.subplots(2, 1)

fig, (ax1, ax2) = plt.subplots(2, 1, sharex=True)

Из официальных документов

matplotlib.pyplot.subplots (nrows = 1, ncols = 1,sharex = False, sharey = False, squeeze = True, subplot_kw = None, gridspec_kw = None, ** fig_kw)

Теперь у вас есть 1 строка и 2 столбца, поэтомуВы видите их рядом друг с другом.

Второй способ использует subplot, где 211 означает фигуру с 2 строками, 1 столбцом и 1-м подзаговором, а 212 означает 2 ряда., 1 столбец и второй участок.Таким образом, первые две цифры указывают количество строк и столбцов, а третья - номер подзаголовка.

plt.subplot(211)
plt.plot(time,x)
plt.ylabel('hi')

plt.subplot(212)
plt.plot(time,y)
plt.ylabel('fds')

enter image description here

...