Как переставить подзаговоры так, чтобы один был под другим?

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

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()

но в результате я продолжаю получать это: введите здесь описание изображения

Я пытался:

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
>>> 

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


person Charlotte Noxon    schedule 01.01.2019    source источник
comment
Ваш вызов plt.subplots(1, 2, sharex=True) говорит о построении графика рядом (1 строка, 2 столбца), просто переверните аргументы nrows и ncols на plt.subplots(2, 1, sharex=True) (2 строки, 1 столбец).   -  person AChampion    schedule 01.01.2019


Ответы (1)


То, как числа работают в подграфиках, заключается в том, что сначала вы указываете число строк, а затем количество столбцов. Чтобы иметь графики друг под другом, вам нужно 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, сжатие = 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')

введите здесь описание изображения

person Sheldore    schedule 01.01.2019