Как сделать несколько участков на одной странице с помощью 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()
563   5  

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

    Ничего не найдено.