Как создать диаграмму в виде полос с помощью matplotlib? - PullRequest
0 голосов
/ 05 октября 2018

Есть ли способ создать график с помощью matplotlib, чтобы при увеличении окна график занимал только полосу экрана?В качестве примера рассмотрим пример ниже.В этом случае я хочу расположить 3 субплота в горизонтальной линии, и я бы хотел, чтобы размер был небольшим, поэтому я добавил 2 строки с пустыми субплотами.Когда я использую figsize, окно, в котором всплывающие окна, имеет заданный размер, но как только оно развернуто, matplotlib переопределяет подзаголовки так, чтобы они занимали весь экран.Я бы хотел, чтобы matplotlib перерисовывал содержимое, чтобы оно соответствовало этой «полосе», а не наоборот.

Таким образом, возможно ли создать полосу напрямую, без нежелательных изменений размера из matplotlib и без добавления всех этихненужные пустые подзаговоры, чтобы сделать трюк?

Спасибо!

РЕДАКТИРОВАТЬ

Я запускаю эту программу, используя Python 3.5 и Matplotlib 2.2.3.Интерактивный бэкэнд - TkAgg.

enter image description here

Ответы [ 2 ]

0 голосов
/ 05 октября 2018

Сетки субплота Matplotlib располагаются в единицах относительно размера фигуры.Позиционирование субплотов в абсолютных координатах, следовательно, требует некоторой настройки.
Вы можете определить ширину и высоту сетки в дюймах, а затем вычислять поля сетки при каждом изменении размера фигуры.В дальнейшем сетка всегда остается шириной 4 дюйма и высотой 1 дюйм, независимо от размера фигуры.

import matplotlib.pyplot as plt
import numpy as np; np.random.seed(42)

fig, axes = plt.subplots(ncols=3, sharey=True)
for ax in axes:
    ax.plot(np.arange(30), np.cumsum(np.random.randn(30)))

# set width and height in physical units (inches)
width = 4 # inch
height= 1 # inch
def resize(evt=None):
    w,h = fig.get_size_inches()
    l = ((w-width)/2.)/w
    b = ((h-height)/2.)/h
    fig.subplots_adjust(left=l, right=1.-l, bottom=b, top=1.-b)
    fig.canvas.draw_idle()


resize()    
fig.canvas.mpl_connect("resize_event", resize)

plt.show()
0 голосов
/ 05 октября 2018

Вы не объяснили свой подход к визуализации.Так что, по моему мнению, вы можете попробовать подзаговор для этого.посмотрите, как работает подзаговор (https://matplotlib.org/api/pyplot_api.html#matplotlib.pyplot.subplot)

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(221)
ax2.plot([(7, 2), (5, 3)], [(1, 6), (9, 5)])

ax3 = fig.add_subplot(222)
ax3.plot([(7, 2), (5, 3)], [(1, 6), (9, 5)])

PLT.show()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...