forked from JMSwag/SimplePyScripts
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathexm12.py
More file actions
60 lines (48 loc) · 3.77 KB
/
exm12.py
File metadata and controls
60 lines (48 loc) · 3.77 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
__author__ = 'ipetrash'
# Цветовые карты используются, если нужно указать в какие цвета должны окрашиваться
# участки трехмерной поверхности в зависимости от значения Z в этой области (задание
# цветового градиента). Тема использование градиентов сама по себе большая и интересная,
# но мы сейчас рассмотрим только некоторые ее аспекты. Чтобы при выводе графика
# использовался градиент, в качестве значения параметра cmap (от слова colormap, цветовая
# карта) нужно передать экземпляр класса matplotlib.colors.Colormap или производного от него.
# Следующий пример использует класс LinearSegmentedColormap, производный от Colormap,
# чтобы создать градиент перехода от синего цвета к красному через белый.
import pylab
from mpl_toolkits.mplot3d import Axes3D
from matplotlib.colors import LinearSegmentedColormap
import numpy
# Эта функция возвращает три двумерные матрицы: x, y, z.
# Координаты x и y лежат в интервале от -10 до 10 с шагом 0.1.
def makeData ():
x = numpy.arange (-10, 10, 0.1)
y = numpy.arange (-10, 10, 0.1)
xgrid, ygrid = numpy.meshgrid(x, y)
zgrid = numpy.sin (xgrid) * numpy.sin (ygrid) / (xgrid * ygrid)
return xgrid, ygrid, zgrid
if __name__ == '__main__':
x, y, z = makeData()
# Чтобы отобразить наши данные, достаточно вызвать метод plot_surface()
# экземпляра класса Axes3D, в который передадим полученные с помощью
# функции makeData() двумерные матрицы.
fig = pylab.figure()
axes = Axes3D(fig)
# Здесь используется статический метод from_list(), который принимает три параметра:
# Имя создаваемой карты
# Список цветов, начиная с цвета для минимального значения на графике (голубой - 'b'),
# через промежуточные цвета (у нас это белый - 'w') к цвету для максимального значения
# функции (красный - 'r').
# Количество цветовых переходов. Чем это число больше, тем более плавный градиент, но
# тем больше памяти он занимает.
# Если вы не хотите каждый раз создавать свою цветовую карту, то можете воспользоваться
# одной из уже готовых карт, которые располагаются в модуле matplotlib.cm.
# Чтобы узнать какие цветовые карты существуют, можно просто прочитать переменную cm._
# cmapnames, которая представляет собой список строк:
# from matplotlib import cm
# print(cm.cmap_d)
#
# from matplotlib import cm
# color_map = cm.cmap_d["jet"]
# axes.plot_surface(x, y, z, rstride=4, cstride=4, cmap=color_map)
color_map = LinearSegmentedColormap.from_list("red_blue", ['b', 'w', 'r'], 256)
axes.plot_surface(x, y, z, rstride=3, cstride=3, cmap=color_map)
pylab.show()