Учебная страница курса биоинформатики,
год поступления 2013
Визуализация данных средствами Python
Часто возникает нобходимость посмотреть глазами на ваши данные, например, построив график. А данных этих может быть так много, что какой-нибудь Excel просто повиснет и не закончит их обсчитывать никогда, при том, что Python обсчитает их за пару минут. Было бы здорово иметь возможность строить графики прямо в Python'е - и такая возможность есть. Для этого есть пакет matplotlib (подробная документация находится по адресу http://matplotlib.org/contents.html), который умеет строить почти любые графики, какие вы можете захотеть построить.
* если вы захотите установить matplotlib себе, то имейте в виду, что он требует также пакеты numpy и scipy
Для начала работы с графиками необходимо импортировать набор функции из пакета matplotlib:
1 import matplotlib.pyplot as plt
Для plt.plot(x,y) – рисуем набор точек (x,y). По умолчанию соседние точки списка соединены линией. plt.show() – показать объект. Простейший график:
Параметр 'b-' задает тип графика - цвет (blue) и тип соединяющей линии ("-" - сплошная).
Самые частые графики
Два основных типа графиков, которые приходится строить очень часто - это двухмерный поточечный график, где каждая точка лежит отдельно и не соединена с другими (scatter plot) и гистограмма.
1) Поточечный график:
Для его построения можно задать другой тип для маркера в вызове plot(), например "o":
1 import matplotlib.pyplot as plt
2 import random
3 random.seed()
4 x=list()
5 y=list()
6 # Creating two subsets of data
7 for i in range(1,200):
8 x.append(random.gauss(0,1))
9 y.append(random.gauss(0,1))
10
11 for i in range(1,200):
12 x.append(random.gauss(8,1))
13 y.append(random.gauss(0,1))
14
15 plt.plot(x,y,'ro')
16 plt.show()
Также для поточечных графиков есть отдельная функция scatter(), см. ниже.
2) Гистограмма:
Гистограмма - это такой вид графика, который отображает, как много тех или иных объектов имеется в ваших данных. Для него в matplotlib есть функция hist():
Отображение вспомогательной информации на графике
Также как и в любом редакторе, где вы можете построить график, в matplotlib к графику можно добавить любую информацию, например: подпись осей, название графика, текст, и многое другое. Добавим к нашему поточечному графику пример:
1 def generate_data():
2 x=list()
3 y=list()
4 # Creating two subsets of data
5 for i in range(1,200):
6 x.append(random.gauss(0,1))
7 y.append(random.gauss(0,1))
8 for i in range(1,200):
9 x.append(random.gauss(8,1))
10 y.append(random.gauss(2,1))
11
12 return x, y
13
14 import matplotlib.pyplot as plt
15 import random
16 random.seed()
17 x, y = generate_data()
18 plt.plot(x, y, 'ro', label = 'GC data')
19 plt.title('GC content')
20 plt.xlabel('Normalized GC content')
21 plt.ylabel('Normalized temperature')
22 x_min = -5
23 x_mean = 5
24 x_max = 15
25 y_min = -3
26 y_mean = 2
27 y_max = 7
28 plt.axis( [x_min, x_max, y_min, y_max] ) # Set axis limits
29 plt.text( x_mean - 2, y_mean, 'Split valley', fontsize=12 ) # Add text 'Split valley' to graph at point (3,0)
30 plt.grid(True) # Turn on grid
31 plt.legend() # Place legend with text according to 'label' parameter of .plot()
32 plt.show()
scatter()
Как уже говорилось выше, для построения поточечного графика scatter plot в matplotlib есть отдельная функция scatter():
Передача параметров массивами
Если вы хотите, чтобы точки выглядели на графике по разному, то у вас есть два варианта действий. Первый - передать больше одного графика на построение. Второй - некоторые из функций matplotlib (см. документацию) позволяют задать свойства (такие, как цвет, размер, форма точки) не для всех точек сразу, а для каждой отдельно. Ниже приведен пример, использующий оба способа:
1 random.seed()
2 x, y = generate_data()
3 sizes = []
4 for i in xrange(400): # 400 is length of x and y
5 s = random.gauss(100,35)
6 if s <= 0:
7 s = 1
8 sizes.append(s)
9
10 # Pass sizes as list, not single value for all points, compare to:
11 # plt.scatter(x[:200], y[:200], s = 100, c = 'g', marker = 'v')
12 plt.scatter(x[:200], y[:200], s = sizes[:200], c = 'g', marker = 'v')
13 # Plot second plot on the same graph
14 plt.scatter(x[200:], y[200:], s = sizes[200:], c = 'r', marker = '1')
15 plt.title('GC content')
16 plt.xlabel('Normalized GC content')
17 plt.ylabel('Normalized temperature')
18 plt.axis( [-5, 15, -3, 7] )
19 plt.text( 3, 2, 'Split valley', fontsize=12 )
20 plt.show()
Сохранить картинку в файл
Чтобы сохранить получившийся график в файл можно использовать кнопку сохранения в интерактивном окне, появляющемся после вызова plt.show(). Если вы хотите сохранять файл аытоматияески, без просмотра, используйте метод savefig():
1 plt.savefig('picture') # creates 'picture.png'
Если вы будете задавать свои форматы, то знайте, что самый правильный формат для графиков - svg, но скорее всего он не откроется у ваших научных руководителей. Так что можете использовать png - отличный формат. Главное помните - никогда не используйте jpg - он размывает резкие контуры, поэтому годится для фото, но не для графиков.