You are currently viewing Построение графиков на Python | Набор 2

Построение графиков на Python | Набор 2

Построение графиков на Python | Набор 1

Подзаголовки требуются, когда мы хотим показать два или более участков на одном рисунке. Мы можем сделать это двумя способами, используя два немного разных метода.

Способ 1

# importing required modules
import matplotlib.pyplot as plt
import numpy as np

# function to generate coordinates
def create_plot(ptype):
	# setting the x-axis values
	x = np.arange(-10, 10, 0.01)
	
	# setting the y-axis values
	if ptype == 'linear':
		y = x
	elif ptype == 'quadratic':
		y = x**2
	elif ptype == 'cubic':
		y = x**3
	elif ptype == 'quartic':
		y = x**4
			
	return(x, y)

# setting a style to use
plt.style.use('fivethirtyeight')

# create a figure
fig = plt.figure()

# define subplots and their positions in figure
plt1 = fig.add_subplot(221)
plt2 = fig.add_subplot(222)
plt3 = fig.add_subplot(223)
plt4 = fig.add_subplot(224)

# plotting points on each subplot
x, y = create_plot('linear')
plt1.plot(x, y, color ='r')
plt1.set_title('$y_1 = x$')

x, y = create_plot('quadratic')
plt2.plot(x, y, color ='b')
plt2.set_title('$y_2 = x^2$')

x, y = create_plot('cubic')
plt3.plot(x, y, color ='g')
plt3.set_title('$y_3 = x^3$')

x, y = create_plot('quartic')
plt4.plot(x, y, color ='k')
plt4.set_title('$y_4 = x^4$')

# adjusting space between subplots
fig.subplots_adjust(hspace=.5,wspace=0.5)

# function to show the plot
plt.show()

Выход:

Давайте пройдемся по этой программе шаг за шагом:

plt.style.use('fivethirtyeight')
  • Стиль участков можно настроить, установив различные доступные стили или установив свой собственный. Вы можете узнать больше об этой функции здесь
fig = plt.figure()
  • Рисунок действует как контейнер верхнего уровня для всех элементов графика. Итак, мы определяем фигуру как инжир который будет содержать все наши подзаголовки.
plt1 = fig.add_subplot(221)
plt2 = fig.add_subplot(222)
plt3 = fig.add_subplot(223)
plt4 = fig.add_subplot(224)
  • Здесь мы используем метод рис.add_subplot для определения подзаголовков и их положений. Прототип функции выглядит следующим образом:
add_subplot(nrows, ncols, plot_number)
  • Если к фигуре применяется подзаголовок, фигура будет условно разделена на подоси «nrows» * ‘ncols». Параметр «plot_number» определяет подзаголовок, который должен быть создан вызовом функции. ‘plot_number «может варьироваться от 1 до максимум «nrows» * » ncols’.
    Если значения трех параметров меньше 10, подзаголовок функции может быть вызван с одним параметром int, где сотни представляют «nrows», десятки представляют «ncols», а единицы представляют «plot_number». Это означает: вместо подзаголовка(2, 3, 4) мы можем написать подзаголовок(234).
    Эта цифра позволит понять, как указываются позиции:
x, y = create_plot('linear')
plt1.plot(x, y, color ='r')
plt1.set_title('$y_1 = x$')
  • Далее мы строим наши точки на каждом подзаголовке. Во-первых, мы генерируем координаты по оси x и y, используя функция create_plot, указав тип кривой, которую мы хотим.
    Затем мы наносим эти точки на наш подзаголовок, используя .метод построения графика. Название подзаголовка задается с помощью метод set_title. С помощью в начале и в конце текста заголовка убедитесь, что » _ «(подчеркивание) читается как нижний индекс, а » ^ » — как верхний.
fig.subplots_adjust(hspace=.5,wspace=0.5)
  • Это еще один полезный метод, который создает пространство между подзаголовками.
plt.show()
  • В конце концов, мы вызываем метод plt.show (), который покажет текущую цифру.

Способ 2

# importing required modules
import matplotlib.pyplot as plt
import numpy as np

# function to generate coordinates
def create_plot(ptype):
	# setting the x-axis values
	x = np.arange(0, 5, 0.01)
	
	# setting y-axis values
	if ptype == 'sin':
		# a sine wave
		y = np.sin(2*np.pi*x)
	elif ptype == 'exp':
		# negative exponential function
		y = np.exp(-x)
	elif ptype == 'hybrid':
		# a damped sine wave
		y = (np.sin(2*np.pi*x))*(np.exp(-x))
			
	return(x, y)

# setting a style to use
plt.style.use('ggplot')

# defining subplots and their positions
plt1 = plt.subplot2grid((11,1), (0,0), rowspan = 3, colspan = 1)
plt2 = plt.subplot2grid((11,1), (4,0), rowspan = 3, colspan = 1)
plt3 = plt.subplot2grid((11,1), (8,0), rowspan = 3, colspan = 1)

# plotting points on each subplot
x, y = create_plot('sin')
plt1.plot(x, y, label = 'sine wave', color ='b')
x, y = create_plot('exp')
plt2.plot(x, y, label = 'negative exponential', color = 'r')
x, y = create_plot('hybrid')
plt3.plot(x, y, label = 'damped sine wave', color = 'g')

# show legends of each subplot
plt1.legend()
plt2.legend()
plt3.legend()

# function to show plot
plt.show()

Выход:

Давайте также рассмотрим важные части этой программы:

plt1 = plt.subplot2grid ((11,1), (0,0), интервал строк = 3, интервал столбцов = 1)
plt2 = plt.subplot2grid ((11,1), (4,0), интервал строк = 3, интервал столбцов = 1)
plt3 = plt.subplot2grid ((11,1), (8,0), интервал строк = 3, интервал столбцов = 1)
  • subplot2grid аналогичен “pyplot.subplot”, но использует индексацию на основе 0 и позволяет подзаголовку занимать несколько ячеек.
    Давайте попробуем понять аргументы метода subplot2grid:
    1. аргумент 1 : геометрия сетки
    2. аргумент 2: расположение подзаголовка в сетке
    3. аргумент 3: (диапазон строк) Количество строк, покрытых подзаголовком.
    4. аргумент 4: (colspan) Количество столбцов, охваченных подзаголовком.
    Эта цифра сделает эту концепцию более понятной:
  • В нашем примере каждый подзаголовок охватывает 3 строки и 1 столбец с двумя пустыми строками (строка № 4,8).
x, y = create_plot('sin')
plt1.plot(x, y, label = 'sine wave', color ='b')
  • В этой части нет ничего особенного, так как синтаксис построения точек на подзаголовке остается прежним.
plt1.legend()
  • Это покажет метку подзаголовка на рисунке.
plt.show()
  • Наконец, мы вызываем функцию plt.show(), чтобы показать текущий график.

Примечание: После рассмотрения двух приведенных выше примеров мы можем сделать вывод, что следует использовать subplot() метод, когда участки имеют одинаковый размер, где как метод следует предпочесть, когда мы хотим большей гибкости в отношении положения и размеров наших подзаголовков.

3-D построение графика

Мы можем легко построить трехмерные фигуры в matplotlib. Теперь мы обсудим некоторые важные и часто используемые трехмерные графики.

  • Точки построения
from mpl_toolkits.mplot3d import axes3d
import matplotlib.pyplot as plt
from matplotlib import style
import numpy as np

# setting a custom style to use
style.use('ggplot')

# create a new figure for plotting
fig = plt.figure()

# create a new subplot on our figure
# and set projection as 3d
ax1 = fig.add_subplot(111, projection='3d')

# defining x, y, z co-ordinates
x = np.random.randint(0, 10, size = 20)
y = np.random.randint(0, 10, size = 20)
z = np.random.randint(0, 10, size = 20)

# plotting the points on subplot


# setting labels for the axes
ax1.set_xlabel('x-axis')
ax1.set_ylabel('y-axis')
ax1.set_zlabel('z-axis')

# function to show the plot
plt.show()
  • Вывод вышеприведенной программы предоставит вам окно, которое может поворачивать или увеличивать сюжет. Вот скриншот: (темные точки ближе, чем светлые)
  • Давайте попробуем сейчас разобраться в некоторых важных аспектах этого кодекса.
from mpl_toolkits.mplot3d import axes3d
  • Это модуль, необходимый для построения графика на трехмерном пространстве.
ax1 = fig.add_subplot(111, projection='3d')
  • Здесь мы создаем подзаголовок на нашей фигуре и задаем аргумент проекции как 3d.
ax1.scatter(x, y, z, c = 'm', marker = 'o')
  • Теперь мы используем .разброс() функция для построения точек в плоскости XYZ.
  • Построение линий
# importing required modules
from mpl_toolkits.mplot3d import axes3d
import matplotlib.pyplot as plt
from matplotlib import style
import numpy as np

# setting a custom style to use
style.use('ggplot')

# create a new figure for plotting
fig = plt.figure()

# create a new subplot on our figure
ax1 = fig.add_subplot(111, projection='3d')

# defining x, y, z co-ordinates
x = np.random.randint(0, 10, size = 5)
y = np.random.randint(0, 10, size = 5)
z = np.random.randint(0, 10, size = 5)

# plotting the points on subplot
ax1.plot_wireframe(x,y,z)

# setting the labels
ax1.set_xlabel('x-axis')
ax1.set_ylabel('y-axis')
ax1.set_zlabel('z-axis')

plt.show()
  • Скриншот трехмерного графика вышеприведенной программы будет выглядеть так:
  • Основное отличие этой программы от предыдущей заключается в:
ax1.plot_wireframe(x,y,z)
  • Мы использовали .plot_wireframe() способ построения линий над заданным набором трехмерных точек.
  • Построение Графиков
# importing required modules
from mpl_toolkits.mplot3d import axes3d
import matplotlib.pyplot as plt
from matplotlib import style
import numpy as np

# setting a custom style to use
style.use('ggplot')

# create a new figure for plotting
fig = plt.figure()

# create a new subplot on our figure
ax1 = fig.add_subplot(111, projection='3d')

# defining x, y, z co-ordinates for bar position
x = [1,2,3,4,5,6,7,8,9,10]
y = [4,3,1,6,5,3,7,5,3,7]
z = np.zeros(10)

# size of bars
dx = np.ones(10)			 # length along x-axis
dy = np.ones(10)			 # length along y-axs
dz = [1,3,4,2,6,7,5,5,10,9] # height of bar

# setting color scheme
color = []
for h in dz:
	if h > 5:
		color.append('r')
	else:
		color.append('b')

# plotting the bars
ax1.bar3d(x, y, z, dx, dy, dz, color = color)

# setting axes labels
ax1.set_xlabel('x-axis')
ax1.set_ylabel('y-axis')
ax1.set_zlabel('z-axis')

plt.show()
  • Скриншот созданной трехмерной среды находится здесь:
  • Давайте рассмотрим важные аспекты этой программы:
x = [1,2,3,4,5,6,7,8,9,10]
y = [4,3,1,6,5,3,7,5,3,7]
z = np.zeros(10)
  • Здесь мы определяем базовые положения баров.
dx = np.ones(10)              # length along x-axis
dy = np.ones(10)              # length along y-axs
dz = [1,3,4,2,6,7,5,5,10,9]   # height of bar
  • dx, dy, dz обозначают размер бара. Рассмотрим стержень как кубоид, тогда dx, dy, dz-его расширения вдоль оси x, y, z соответственно.
for h in dz:
 if h > 5:
 color.append('r')
 else:
 color.append('b')
  • Здесь мы задаем цвет для каждой полосы в виде списка. Цветовая схема красная для полос высотой более 5 и синяя в противном случае.
ax1.bar3d(x, y, z, dx, dy, dz, color = color)
  • Наконец, для построения графиков мы используем функцию .bar3d ().
  • Построение кривых
# importing required modules
from mpl_toolkits.mplot3d import axes3d
import matplotlib.pyplot as plt
from matplotlib import style
import numpy as np

# setting a custom style to use
style.use('ggplot')

# create a new figure for plotting
fig = plt.figure()

# create a new subplot on our figure
ax1 = fig.add_subplot(111, projection='3d')

# get points for a mesh grid
u, v = np.mgrid[0:2*np.pi:200j, 0:np.pi:100j]

# setting x, y, z co-ordinates
x=np.cos(u)*np.sin(v)
y=np.sin(u)*np.sin(v)
z=np.cos(v)

# plotting the curve
ax1.plot_wireframe(x, y, z, rstride = 5, cstride = 5, linewidth = 1)

plt.show()
  • Вывод этой программы будет выглядеть следующим образом:
  • Здесь мы изобразили сферу в виде сетчатой сетки.
    Давайте пройдемся по некоторым важным частям:
u, v = np.mgrid[0:2*np.pi:200j, 0:np.pi:100j]
  • Мы используем np.mgrid для получения точек, чтобы создать сетку.
    Вы можете прочитать больше об этом здесь.
x=np.cos(u)*np.sin(v)
y=np.sin(u)*np.sin(v)
z=np.cos(v)
  • Это не что иное, как параметрическое уравнение сферы.
ax1.plot_wireframe(x, y, z, rstride = 5, cstride = 5, linewidth = 1)
  • Аган, мы используем .plot_wireframe(). Здесь, первая поездка и аргументы cstride можно использовать для определения того, насколько плотной должна быть наша сетка.