Bar - гистограмма
Гистограммы устроены очень просто, но изменяя различные параметры мы можем отобразить с их помощью очень много информации, а так же повысить как наглядность данных так и привлекательность самого графика.
Ширина прямоугольников
Чаще всего мы строим гистограммы из одиночных наборов данных, в таких случаях мы можем обойтись, вообще, без каких бы то ни было изменений графика. Просто строим одну или несколько гистограмм на одной области Figure:
%matplotlib inline
import numpy as np
import matplotlib.pyplot as plt
x = np.arange(1, 8)
y = np.random.randint(1, 20, size = 7)
fig, ax = plt.subplots()
ax.bar(x, y)
ax.set_facecolor('seashell')
fig.set_facecolor('floralwhite')
fig.set_figwidth(12) # ширина Figure
fig.set_figheight(6) # высота Figure
plt.show()
%matplotlib inline
import numpy as np
import matplotlib.pyplot as plt
x1 = np.arange(1, 8)
y1 = np.random.randint(1, 20, size = 7)
x2 = np.arange(1, 101)
y2 = np.random.randint(1, 20, size = 100)
fig, axes = plt.subplots(2, 1)
axes[0].bar(x1, y1)
axes[1].bar(x2, y2)
axes[0].set_facecolor('seashell')
axes[1].set_facecolor('seashell')
fig.set_facecolor('floralwhite')
fig.set_figwidth(12) # ширина Figure
fig.set_figheight(6) # высота Figure
plt.show()
Ширина прямоугольников подбирается автоматически и нас это, вполне, устраивает. Но если мы имеем дело с несколькими наборами данных, которые нужно отобразить в пределах одной области Axes, то прямоугольники начинают перекрывать друг друга:
%matplotlib inline
import numpy as np
import matplotlib.pyplot as plt
x = np.arange(1, 8)
y1 = np.random.randint(1, 10, size = 7)
y2 = np.random.randint(1, 10, size = 7)
fig, ax = plt.subplots()
ax.bar(x, y1)
ax.bar(x, y2)
ax.set_facecolor('seashell')
fig.set_figwidth(12) # ширина Figure
fig.set_figheight(6) # высота Figure
fig.set_facecolor('floralwhite')
plt.show()
В таких случаях, нам необходимо вручную задавать ширину с помощью параметра width и смещение прямоугольников в массиве x:
%matplotlib inline
import numpy as np
import matplotlib.pyplot as plt
# Задаем смещение равное половине ширины прямоугольника:
x1 = np.arange(1, 8) - 0.2
x2 = np.arange(1, 8) + 0.2
y1 = np.random.randint(1, 10, size = 7)
y2 = np.random.randint(1, 10, size = 7)
fig, ax = plt.subplots()
ax.bar(x1, y1, width = 0.4)
ax.bar(x2, y2, width = 0.4)
ax.set_facecolor('seashell')
fig.set_figwidth(12) # ширина Figure
fig.set_figheight(6) # высота Figure
fig.set_facecolor('floralwhite')
plt.show()
В некоторых ситуациях ширина прямоугольников, так же как и их высота, может быть пропорциональна некоторой величине. Что бы задать ширину каждого отдельного прямоугольника можно указать параметр width в виде массива чисел:
import numpy as np
import matplotlib.pyplot as plt
x = np.arange(1, 8)
y = np.random.randint(1, 10, size = 7)
fig, ax = plt.subplots()
width_rectangle = np.random.rand(7)
ax.bar(x, y, width = width_rectangle)
fig.set_figwidth(12) # ширина и
fig.set_figheight(6) # высота "Figure"
fig.set_facecolor('floralwhite')
ax.set_facecolor('seashell')
plt.show()
РЕКЛАМА
Выравнивание нижнего края прямоугольников
Разместить несколько гистограмм на одной области Axes можно не только с помощью горизонтального смещения и изменения ширины прямоугольников, но и с помощью параметра bottom, который задает значение по которому выравнивается нижний край прямоугольников:
import numpy as np
import matplotlib.pyplot as plt
x = np.arange(1, 8)
y1 = np.random.randint(1, 10, size = 7)
y2 = np.random.randint(1, 10, size = 7)
y3 = np.random.randint(1, 10, size = 7)
fig, ax = plt.subplots()
ax.bar(x, y1)
ax.bar(x, y2, bottom = 11)
ax.bar(x, y3, bottom = 21)
fig.set_figwidth(12) # ширина и
fig.set_figheight(6) # высота "Figure"
fig.set_facecolor('floralwhite')
ax.set_facecolor('seashell')
plt.show()
Выравнивание для каждого прямоугольника можно задать с помощью массива:
import numpy as np
import matplotlib.pyplot as plt
x = np.arange(1, 51)
y = np.random.randint(1, 50, size = 50)
fig, ax = plt.subplots()
bottom_rectangle = np.random.randint(30, size = 50)
ax.bar(x, y, bottom = bottom_rectangle)
fig.set_figwidth(12) # ширина и
fig.set_figheight(6) # высота "Figure"
fig.set_facecolor('floralwhite')
ax.set_facecolor('seashell')
plt.show()
Для того что бы состыковать прямоугольники нескольких наборов данных, достаточно выровнять одни прямоугольники по значениям других:
import numpy as np
import matplotlib.pyplot as plt
x = np.arange(1, 8)
data_1 = np.random.randint(2, 15, size = 7)
data_2 = np.random.randint(3, 20, size = 7)
fig, ax = plt.subplots()
ax.bar(x, data_1)
ax.bar(x, data_2, bottom = data_1)
fig.set_figwidth(12) # ширина и
fig.set_figheight(6) # высота "Figure"
fig.set_facecolor('floralwhite')
ax.set_facecolor('seashell')
plt.show()
Цвет
Для того что бы задать цвет всех прямоугольников достаточно указать его в параметре color:
import numpy as np
import matplotlib.pyplot as plt
x = np.arange(1, 8)
y = np.random.randint(1, 10, size = 7)
fig, ax = plt.subplots()
ax.bar(x, y, color = 'red')
fig.set_figwidth(12) # ширина и
fig.set_figheight(6) # высота "Figure"
fig.set_facecolor('floralwhite')
ax.set_facecolor('seashell')
plt.show()
Так же возможно задать цвет каждого отдельного прямоугольника, указав в параметре color массив цветов:
import numpy as np
import matplotlib.pyplot as plt
x = np.arange(1, 8)
y = np.random.randint(1, 10, size = 7)
fig, ax = plt.subplots()
color_rectangle = np.random.rand(7, 3) # RGB
ax.bar(x, y, color = color_rectangle)
fig.set_figwidth(12) # ширина и
fig.set_figheight(6) # высота "Figure"
fig.set_facecolor('floralwhite')
ax.set_facecolor('seashell')
plt.show()
Не забывайте, что matplotlib поддерживает разные цветовые модели и форматы. Задавая цвет в модели RGBA вы можете контролировать прозрачность прямоугольников, что так же позволяет размещать несколько наборов данных, но без смещения:
import numpy as np
import matplotlib.pyplot as plt
x = np.arange(1, 8)
y1 = np.random.randint(1, 10, size = 7)
y2 = np.random.randint(1, 10, size = 7)
fig, ax = plt.subplots()
color_rectangle = np.random.rand(7, 3) # RGB
ax.bar(x, y1, color = color_rectangle, width = 0.5)
color_rectangle = np.random.rand(7, 4) # RGBA
color_rectangle[:,3] = 0.5
ax.bar(x, y2, color = color_rectangle)
fig.set_figwidth(12) # ширина и
fig.set_figheight(6) # высота "Figure"
fig.set_facecolor('floralwhite')
ax.set_facecolor('seashell')
plt.show()
Если вам необходимо выделить границу прямоугольников, то вы можете задать ее цвет (edgecolor) и толщину (linewidth):
import numpy as np
import matplotlib.pyplot as plt
x = np.arange(1, 8)
y = np.random.randint(1, 10, size = 7)
fig, ax = plt.subplots()
ax.bar(x, y,
color = 'chartreuse',
edgecolor = 'darkblue',
linewidth = 5)
fig.set_figwidth(12) # ширина и
fig.set_figheight(6) # высота "Figure"
ax.set_facecolor('darkslateblue')
plt.show()
РЕКЛАМА
Отображение погрешности
На гистограммах можно указывать погрешность измерения величины, как по горизонтали (xerr) так и вертикали (xerr):
import numpy as np
import matplotlib.pyplot as plt
x = np.arange(1, 8)
y = np.random.randint(1, 10, size = 7)
fig, axes = plt.subplots(2, 1)
x_error = np.random.rand(7)
axes[0].bar(x, y,
xerr = x_error,
width = 0.3)
y_error = np.random.rand(7)*2
axes[1].bar(x, y,
yerr = y_error,
width = 0.5)
fig.set_figwidth(12) # ширина и
fig.set_figheight(6) # высота "Figure"
fig.set_facecolor('floralwhite')
axes[0].set_facecolor('seashell')
axes[1].set_facecolor('seashell')
plt.show()
Одно число задает одинаковую погрешность, массив чисел длинной x задает разную но симметричную погрешность для каждого прямоугольника, а массив чисел с формой (2, x) задает минимальное и максимальное значение погрешности для каждого прямоугольника:
import numpy as np
import matplotlib.pyplot as plt
x = np.arange(1, 13)
y = np.random.randint(5, 20, size = 12)
fig, axes = plt.subplots(3, 1)
axes[0].bar(x, y, yerr = 1)
y_error = np.random.rand(12)*5
axes[1].bar(x, y,
yerr = y_error)
y_error = np.random.rand(2,12)*10
y_error[:][0] /= 2
axes[2].bar(x, y,
yerr = y_error)
axes[0].set_title('Одинаковая погрешность')
axes[1].set_title('Разная, но симметричная погрешность')
axes[2].set_title('Максимальная и минимальная погрешность')
axes[0].set_xticks([])
axes[1].set_xticks([])
axes[0].set_facecolor('seashell')
axes[1].set_facecolor('seashell')
axes[2].set_facecolor('seashell')
fig.set_figwidth(12) # ширина и
fig.set_figheight(9) # высота "Figure"
fig.set_facecolor('floralwhite')
plt.show()
Линии погрешности так же можно видоизменять:
# Горизонтальная ошибка
import numpy as np
import matplotlib.pyplot as plt
x = np.arange(1, 8)
y = np.random.randint(1, 10, size = 7)
fig, ax = plt.subplots()
y_error = np.random.randint(5, 20, size = (2, 7))/15
ax.bar(x, y,
yerr = y_error, # границы погрешностей
ecolor = 'darkred', # цвет линии погрешности
capsize = 10, # горизонтальная черточка
edgecolor = 'red', # цвет края прямоугольника
linewidth = 2, # ширина крайней линии
color = 'seashell', # цвет прямоугольника
linestyle = '--') # начертание линии
fig.set_figwidth(12) # ширина и
fig.set_figheight(6) # высота "Figure"
fig.set_facecolor('floralwhite')
ax.set_facecolor('seashell')
plt.show()
Do'stlaringiz bilan baham: |