Как сделать несколько участков на одной странице с помощью matplotlib?
Я написал код, который открывает 16 цифр сразу. В настоящее время все они открываются в виде отдельных графиков. Я бы хотел, чтобы они открывались все на одной странице. Не тот же график. Я хочу 16 отдельных графиков на одной странице/окне. Также по какой-то причине формат numbins и defaultreallimits не проходит мимо рисунка 1. Нужно ли мне использовать команду subplot? Я не понимаю, почему я должен был бы, но не могу понять, что еще я сделал бы?
import csv
import scipy.stats
import numpy
import matplotlib.pyplot as plt
for i in range(16):
plt.figure(i)
filename= easygui.fileopenbox(msg='Pdf distance 90m contour', title='select file', filetypes=['*.csv'], default='X:herring_schools')
alt_file=open(filename)
a=[]
for row in csv.DictReader(alt_file):
a.append(row['Dist_90m(nmi)'])
y= numpy.array(a, float)
relpdf=scipy.stats.relfreq(y, numbins=7, defaultreallimits=(-10,60))
bins = numpy.arange(-10,60,10)
print numpy.sum(relpdf[0])
print bins
patches=plt.bar(bins,relpdf[0], width=10, facecolor='black')
titlename= easygui.enterbox(msg='write graph title', title='', default='', strip=True, image=None, root=None)
plt.title(titlename)
plt.ylabel('Probability Density Function')
plt.xlabel('Distance from 90m Contour Line(nm)')
plt.ylim([0,1])
plt.show()
5 ответов:
чтобы ответить на ваш главный вопрос, вы хотите использовать делянке. Я думаю, что меняется
plt.figure(i)доplt.subplot(4,4,i+1)должны работать.
ответ от las3rjock, который каким-то образом является ответом, принятым OP, неверен-код не запускается, и он не является допустимым синтаксисом matplotlib; этот ответ не содержит выполняемого кода и не содержит никакой информации или предложения о том, что OP может оказаться полезным при написании собственного кода для решения проблемы в OP.
учитывая, что это принятый ответ и уже получил несколько голосов, я полагаю, что небольшая деконструкция в порядке.
во-первых, вызов делянке тут не дать вам несколько участков;делянке вызывается для создания одного участка, а также для создания нескольких участков. Кроме того, " изменение plt.рисунок(я)" не является правильным.
plt.рисунок() (в котором plt или PLT обычно является matplotlib pyplot библиотека импортированный и отскок как глобальная переменная, plt или иногда PLT, как Итак:
from matplotlib import pyplot as PLT fig = PLT.figure()строка чуть выше создает экземпляр фигуры matplotlib; этот объект add_subplot метод затем вызывается для каждого окна построения (неофициально подумайте о оси x & y, содержащей один подзаголовок). Вы создаете (будь то только один или для нескольких на странице), Как так
fig.add_subplot(111)этот синтаксис эквивалентен
fig.add_subplot(1,1,1)выбрать тот, который имеет смысл для вас.
ниже я перечислил код для построения двух участков на a страница, одна над другой. Форматирование выполняется с помощью аргумента, переданного в add_subplot. Обратите внимание, что аргумент (211) для первого участка и (212) для второй.
from matplotlib import pyplot as PLT fig = PLT.figure() ax1 = fig.add_subplot(211) ax1.plot([(1, 2), (3, 4)], [(4, 3), (2, 3)]) ax2 = fig.add_subplot(212) ax2.plot([(7, 2), (5, 3)], [(1, 6), (9, 5)]) PLT.show()каждый из этих двух аргументов является полной спецификацией для правильного размещения соответствующих окон печати на странице.
211 (который опять же может быть написано в 3-кортеж форма as (2,1,1) означает из двух строк и один столбец окон участка; третья цифра указывает порядок этого конкретного окна подзаголовка относительно других окон подзаголовка-в этом случае это первый участок (который помещает его в строку 1), следовательно, номер участка 1, строка 1 col 1.
аргумент передается во второй вызов add_subplot, отличается от первого только конечной цифрой (2 вместо 1, потому что этот график является вторым сюжет (строка 2, столбец 1).
пример с большим количеством сюжетов: если вместо этого вы хотели четыре графики на странице, в конфигурации матрицы 2x2, вы должны вызвать метод add_subplot четыре раза, передавая эти четыре аргумента (221), (222), (223), и (224), чтобы создать четыре участка на странице в 10, 2, 8 и 4 часа, соответственно и в этом порядке.
обратите внимание, что каждый из четырех аргументов содержит два вывода 2-это кодирует конфигурацию 2 x 2, т. е. две строки и две колонки.
третья (самая правая) цифра в каждом из четырех аргументов кодирует порядок этого конкретного окна графика в матрице 2 x 2-т. е. строка 1 col 1 (1), строка 1 col 2 (2), строка 2 col 1 (3), строка 2 col 2 (4).
так как этот вопрос от 4 лет назад новые вещи были реализованы и среди них есть новая функция
plt.subplotsчто очень удобно:fig, axes = plot.subplots(nrows=2, ncols=3, sharex=True, sharey=True)здесь
axesэтоnumpy.ndarrayобъектов AxesSubplot, что делает его очень удобным, чтобы пройти через различные подзаголовки только с помощью индексов массива[i,j].
Это также работает:
for i in range(19): plt.subplot(5,4,i+1)он строит 19 общих графиков на одной странице. Формат 5 и 4 по..
@doug & FS.'s ответ очень хорошие решения. Я хочу поделиться решением для итерации на панд.фрейм данных.
import pandas as pd df=pd.DataFrame([[1, 2], [3, 4], [4, 3], [2, 3]]) fig = plt.figure(figsize=(14,8)) for i in df.columns: ax=plt.subplot(2,1,i+1) df[[i]].plot(ax=ax) print(i) plt.show()
Comments