В настоящее время самым простым способом является использование AxesGrid, как in this yt cookbook example, так и this one.
Вот пример, который описывает плотность газа в два раза по временному ряду, используя yt 3.2.1. Пример данных, которые я использую, можно загрузить с http://yt-project.org/data.
import yt
import matplotlib.pyplot as plt
from mpl_toolkits.axes_grid1 import AxesGrid
fns = ['enzo_tiny_cosmology/DD0005/DD0005', 'enzo_tiny_cosmology/DD0040/DD0040']
fig = plt.figure()
# See http://matplotlib.org/mpl_toolkits/axes_grid/api/axes_grid_api.html
# These choices of keyword arguments produce a four panel plot with a single
# shared narrow colorbar on the right hand side of the multipanel plot. Axes
# labels are drawn for all plots since we're slicing along different directions
# for each plot.
grid = AxesGrid(fig, (0.075,0.075,0.85,0.85),
nrows_ncols = (2, 1),
axes_pad = 0.05,
label_mode = "L",
share_all = True,
cbar_location="right",
cbar_mode="single",
cbar_size="3%",
cbar_pad="0%")
for i, fn in enumerate(fns):
# Load the data and create a single plot
ds = yt.load(fn) # load data
# Make a ProjectionPlot with a width of 34 comoving megaparsecs
p = yt.ProjectionPlot(ds, 'z', 'density', width=(34, 'Mpccm'))
# Ensure the colorbar limits match for all plots
p.set_zlim('density', 1e-4, 1e-2)
# This forces the ProjectionPlot to redraw itself on the AxesGrid axes.
plot = p.plots['density']
plot.figure = fig
plot.axes = grid[i].axes
plot.cax = grid.cbar_axes[i]
# Finally, this actually redraws the plot.
p._setup_plots()
plt.savefig('multiplot_1x2_time_series.png', bbox_inches='tight')
Вы можете сделать это по-своему тоже (с помощью fig.add_subplots
вместо AxesGrid
), но вам нужно вручную позиционировать оси, а также изменить размер фигуры.
Наконец, если вы хотите, чтобы фигура была меньше, вы можете контролировать размер фигуры, пройдя фигуру размером в дюймах, когда вы создадите фигуру с помощью plt.figure()
. Если вы это сделаете, вы можете также отрегулировать размер шрифта, вызвав p.set_font_size()
на ProjectionPlot
.
Спасибо за использование yt! Если вы столкнетесь с дополнительными проблемами, вы получите больше внимания от разработчика, если вы отправите сообщение в наш список рассылки. Тем не менее, я обязательно буду следить за StackOverflow за ваши вопросы в будущем. – ngoldbaum