Оформление надписей на линиях уровня




Перейдем теперь к настройке внешнего вида подписей, создаваемых с помощью функции clabel.

Пожалуй, наиболее полезный из дополнительных параметров функции clabel - это именованный параметр colors, который задает цвета для подписей линий уровня. Этот параметр работает аналогично параметру colors для функций contour / contourf, который был описан в предыдущем разделе. Параметр colors может быть равен None (значение по умолчанию), в этом случае метки линий уровня будут рисоваться теми же цветами, что и соответствующая линия. Параметр colors может быть равен строке, задающий цвет, в этом случае все метки будут отображаться одинаковым цветом. Также параметр colors может быть равен кортежу аргументов, описывающих цвета, в этом случае метки будут рисоваться цветами из кортежа, а цвета будут сменять друг друга по очереди.

Воспользуемся параметром color и сделаем так, чтобы все метки были нарисованы черным цветом:

# -*- coding: utf-8 -*-

import pylab
import numpy


def makeData():
x = numpy.arange(-10, 10, 0.05)
y = numpy.arange(-10, 10, 0.05)
xgrid, ygrid = numpy.meshgrid(x, y)

zgrid = (numpy.sin(xgrid * 0.3) * numpy.cos(ygrid * 0.75) /
(1 + numpy.abs(xgrid * ygrid) * 0.05))
return xgrid, ygrid, zgrid


if __name__ == '__main__':
x, y, z = makeData()
cs = pylab.contour(x, y, z)
pylab.clabel(cs, colors="#000000")

pylab.show()

Исходник

Того же эффекта мы бы добились, если передали параметру colors значения black или просто k.

Если вам не нравится, что метки прерывают собой линии уровня, то в функцию clabel можно передать именованный параметр inline, равный False как показано в следующем примере:

# -*- coding: utf-8 -*-

import pylab
import numpy


def makeData():
x = numpy.arange(-10, 10, 0.05)
y = numpy.arange(-10, 10, 0.05)
xgrid, ygrid = numpy.meshgrid(x, y)

zgrid = (numpy.sin(xgrid * 0.3) * numpy.cos(ygrid * 0.75) /
(1 + numpy.abs(xgrid * ygrid) * 0.05))
return xgrid, ygrid, zgrid


if __name__ == '__main__':
x, y, z = makeData()
cs = pylab.contour(x, y, z)
pylab.clabel(cs, colors="black", inline=False)

pylab.show()

Исходник

Результат теперь выглядит следующим образом (теперь текст нанесен непосредственно поверх линий уровня):

Еще один полезный параметр функции clabel - это именованный параметр fmt, который задает формат чисел на графике. В простейшем случае параметр fmt может быть строкой, задающий формат вывода чисел. По умолчанию установлен вывод числа с тремя знаками после запятой, что соответствует строке "%1.3f".

Зададим параметр fmt, таким образом чтобы перед значениями было написано "x=", а числа выводились с двумя знаками после запятой.

# -*- coding: utf-8 -*-

import pylab
import numpy


def makeData():
x = numpy.arange(-10, 10, 0.05)
y = numpy.arange(-10, 10, 0.05)
xgrid, ygrid = numpy.meshgrid(x, y)

zgrid = (numpy.sin(xgrid * 0.3) * numpy.cos(ygrid * 0.75) /
(1 + numpy.abs(xgrid * ygrid) * 0.05))
return xgrid, ygrid, zgrid


if __name__ == '__main__':
x, y, z = makeData()
cs = pylab.contour(x, y, z)
pylab.clabel(cs, colors="black", fmt='x=%.2f')

pylab.show()

Исходник

Теперь наш график выглядит следующим образом:

Именованный параметр fmt в качестве значения может принимать словарь, в котом ключ - это величина функции для линии уровня, а значение - строка, которая будет выведена для данного значения линии уровня. При этом обязательно словарь должен включать все значения для линий уровня, которые есть на графике, иначе вы получите исключение KeyError при попытке Matplotlib обратиться к несуществующему элементу словаря.

В следующем примере мы с помощью параметра fmt скрываем надпись для линии уровня, проходящей по нулю, а для других значений явно задаем метки, особо отмечая значения ±0.75.

# -*- coding: utf-8 -*-

import pylab
import numpy


def makeData():
x = numpy.arange(-10, 10, 0.05)
y = numpy.arange(-10, 10, 0.05)
xgrid, ygrid = numpy.meshgrid(x, y)

zgrid = (numpy.sin(xgrid * 0.3) * numpy.cos(ygrid * 0.75) /
(1 + numpy.abs(xgrid * ygrid) * 0.05))
return xgrid, ygrid, zgrid


if __name__ == '__main__':
x, y, z = makeData()
cs = pylab.contour(x, y, z)

fmt_dict = {0.0: '',
-0.25: '-0.25',
0.25: '0.25',
-0.5: '-0.5',
0.5: '0.5',
-0.75: '-0.75 (!)',
0.75: '0.75 (!)',
}
pylab.clabel(cs, colors="black", fmt=fmt_dict)

pylab.show()

Исходник

Кроме того, в качестве значения параметра fmt может выступать экземпляр класса matplotlib.ticker.Formatter, про использование этого класса подробно написано в статье Использование библиотеки Matplotlib. Как изменять формат меток на осях.



Поделиться:




Поиск по сайту

©2015-2024 poisk-ru.ru
Все права принадлежать их авторам. Данный сайт не претендует на авторства, а предоставляет бесплатное использование.
Дата создания страницы: 2017-10-24 Нарушение авторских прав и Нарушение персональных данных


Поиск по сайту: