Мало знаний, большой вызов! Эта статья участвует в "Необходимые знания для программистов«Творческая деятельность.
Эта статья участвовала в "Проект «Звезда раскопок»”, чтобы выиграть творческий подарочный пакет и бросить вызов творческим поощрительным деньгам.
Расстояние между делениями
До сих пор мы позволяли Matplotlib автоматически обрабатывать размещение отметок на осях, но иногда нам нужно переопределить конфигурацию отметок оси по умолчанию, чтобы быстрее оценить координаты точек на графике.
import numpy as np
import matplotlib.pyplot as plt
import matplotlib.ticker as ticker
x = np.linspace(-20, 20, 1024)
y = np.sinc(x)
ax = plt.axes()
ax.xaxis.set_major_locator(ticker.MultipleLocator(5))
ax.xaxis.set_minor_locator(ticker.MultipleLocator(1))
plt.plot(x, y, c = 'm')
plt.show()
Приведенный выше код заставляет горизонтальный масштаб отображаться каждые 5 шагов. Кроме того, мы также добавили субшкалы, а интервал субшкал составляет 1 единичный шаг.Шаги описываются следующим образом:
- Сначала создайте экземпляр объекта Axes, который используется для управления осями на графике:
ax=plot.Axes(). - затем используйте
LocatorЭкземпляр устанавливает основные и второстепенные отметки для оси x (ax.xaxis) или оси y (ax.yaxis).
Также добавьте дополнительную сетку для второстепенных делений:
import numpy as np
import matplotlib.pyplot as plt
import matplotlib.ticker as ticker
x = np.linspace(-20, 20, 1024)
y = np.sinc(x)
ax = plt.axes()
ax.xaxis.set_major_locator(ticker.MultipleLocator(5))
ax.xaxis.set_minor_locator(ticker.MultipleLocator(1))
plt.grid(True, which='both', ls='dashed')
plt.plot(x, y, c = 'm')
plt.show()
Tips:我们已经知道,可以使用plt.grid()添加辅助网格,但此函数还有一个可选参数which,它具有三个可选值:"minor"、"major"和"both",分别用于仅显示副刻度、仅显示主刻度、主副刻度同时显示。
Контрольные галочки
Пришло время представить настройку тиковых меток.Тиковые метки — это координаты в графическом пространстве.Хотя цифровых меток достаточно для большинства сценариев, их не всегда достаточно. Например, нам нужно отобразить доход 100 компаний, тогда нам нужно, чтобы метка шкалы абсцисс была названием компании, а не числом; также для временных рядов мы хотим, чтобы метка шкалы абсцисс была датой... Учитывая такие потребности, нам нужно использовать API, предоставляемый Matplotlib, для управления метками галочек. Метки-галочки можно установить для любой фигуры Matplotlib следующим образом:
import numpy as np
import matplotlib.ticker as ticker
import matplotlib.pyplot as plt
name_list = ('Apple', 'Orange', 'Banana', 'Pear', 'Mango')
value_list = np.random.randint(0, 99, size = len(name_list))
pos_list = np.arange(len(name_list))
ax = plt.axes()
ax.xaxis.set_major_locator(ticker.FixedLocator((pos_list)))
ax.xaxis.set_major_formatter(ticker.FixedFormatter((name_list)))
plt.bar(pos_list, value_list, color = 'c', align = 'center')
plt.show()
Tips:我们首先使用ticker.Locator实例来生成刻度的位置,然后使用ticker.Formatter实例将为刻度生成标签。FixedFormatter从字符串列表中获取标签,然后用Formatter实例设置坐标轴。同时,我们还使用了FixedLocator来确保每个标签中心都正好与刻度中间对齐。
Более простой способ настройки
Хотя описанный выше метод можно использовать для управления метками делений, видно, что этот метод слишком сложен.Если метки делений представляют собой фиксированный список символов, можно использовать следующий простой метод настройки:
import numpy as np
import matplotlib.pyplot as plt
name_list = ('Apple', 'Orange', 'Banana', 'Pear', 'Mango')
value_list = np.random.randint(0, 99, size = len(name_list))
pos_list = np.arange(len(name_list))
plt.bar(pos_list, value_list, color = 'c', align = 'center')
plt.xticks(pos_list, name_list)
plt.show()
Tips:使用plt.xticks()函数为一组固定的刻度提供固定标签,此函数接受位置列表和名称列表作为参数值,可以看出,此方法比第一种方法实现起来更简单。
Расширенное управление галочками
Можно использовать не только фиксированные метки, но и метки, сгенерированные функцией, с помощью API тикера:
import numpy as np
import matplotlib.pyplot as plt
import matplotlib.ticker as ticker
def make_label(value, pos):
return '%0.1f%%' % (100. * value)
ax = plt.axes()
ax.xaxis.set_major_formatter(ticker.FuncFormatter(make_label))
x = np.linspace(0, 1, 256)
plt.plot(x, np.exp(-10 * x), c ='c')
plt.plot(x, np.exp(-5 * x), c= 'c', ls = '--')
plt.show()
在此示例中,刻度标签是由自定义函数make_label生成的。此函数以刻度的坐标作为输入,并返回一个字符串作为坐标标签,这比给出固定的字符串列表更灵活。为了使用自定义函数,需要使用FuncFormatter实例——一个以函数为参数的格式化实例。
Этот метод делегирования фактической задачи создания меток другим функциям называется шаблоном делегирования, и это отличная техника программирования. Допустим, мы хотим отображать каждый тик как дату, что можно сделать с помощью стандартных функций времени и даты Python:
import numpy as np
import datetime
import matplotlib.pyplot as plt
import matplotlib.ticker as ticker
start_date = datetime.datetime(1998, 1, 1)
def make_label(value, pos):
time = start_date + datetime.timedelta(days = 365 * value)
return time.strftime('%b %y')
ax = plt.axes()
ax.xaxis.set_major_formatter(ticker.FuncFormatter(make_label))
x = np.linspace(0, 1, 256)
plt.plot(x, np.exp(-10 * x), c ='c')
plt.plot(x, np.exp(-5 * x), c= 'c', ls = '--')
labels = ax.get_xticklabels()
plt.setp(labels, rotation = 30.)
plt.show()
Tips:可以利用ax.get_xticklabels()获取刻度标签实例,然后对标签进行旋转,以避免长标签之间重叠,旋转使用plt.setp()函数,其接受刻度标签实例和旋转角度作为参数值。
Ссылка на серию
Рисование общих статистических графиков в Matplotlib
Matplotlib отображает статистику с помощью пользовательских цветов
Стиль линии управления Matplotlib и ширина линии
Пользовательский стиль Matplotlib для рисования красивых статистических диаграмм
Matplotlib добавляет текстовое описание к рисунку
Matplotlib добавляет аннотацию к графику
Matplotlib добавляет на рисунок вспомогательную сетку и направляющие линии