簡體   English   中英

Python 圖 - 在子圖中繪制子圖

[英]Python Plots - Plotting a subplots in a subplots

我想 plot 一個圖表,表示根據不同變量的變化。 示例圖如下所示。 示例圖

這個想法是 plot 子圖中的子圖。 注意它不同於使用具有預定義行數和列數的子圖繪制圖形,即 matplotlib.pyplot.subplots(nrows=2, ncols=2)

我可以使用 matplotlib/seaborn plot 這樣的數字嗎?

我已經繪制了框架並將軸放在框架內,一切都基於沒有。 子圖/框架,沒有。 框架網格的行和列的數量以及不同元素的物理尺寸。

我想大部分代碼都是不言自明的,除了我們將軸放置在精確位置的部分,這是從Demo Fixed Size Axes偷來的,如果您看到需要說明的點,請詢問

import matplotlib
from mpl_toolkits.axes_grid1 import Divider, Size
from mpl_toolkits.axes_grid1.mpl_axes import Axes
import matplotlib.pyplot as plt
import numpy as np
from itertools import product

mm = lambda d: d/25.4

nplots = 2
wp, hp = mm(40), mm(28)
dxp, dyp = mm(16), mm(12)

nrows, ncols = 3, 2
wf, hf = nplots*(wp+dxp), hp+dyp
dxf, dyf = mm(10), mm(8)

xcorners, ycorners = (np.arange(dxf/2,ncols*(wf+dxf),wf+dxf),
                      np.arange(dyf/2,nrows*(hf+dyf),hf+dyf))

# plus 10 mm for suptitle
fig = plt.figure(figsize=(ncols*(wf+dxf), nrows*(hf+dyf)+mm(10))) 

rect = lambda xy: plt.Rectangle(xy, wf, hf,
                                transform=fig.dpi_scale_trans,
                                figure=fig,
                                edgecolor='k', facecolor='none')
fig.patches.extend([rect(xy) for xy in product(xcorners, ycorners)])

t = np.linspace(0,3.14,315); s = np.sin(t)

for nframe, (y, x) in enumerate(product(ycorners, xcorners), 1):
    for n in range(nplots):
        divider = Divider(fig, (0.0, 0.0, 1., 1.),
                          [Size.Fixed(x+0.7*dxp+n*(wp+dxp)), Size.Fixed(wp)],
                          [Size.Fixed(y+0.7*dyp           ), Size.Fixed(hp)],
                          aspect=False)
        ax = Axes(fig, divider.get_position())
        ax.set_axes_locator(divider.new_locator(nx=1, ny=1))
        ax.plot(t, s)
        fig.add_axes(ax)
        fig.text(x, y, 'Frame %d'%nframe, transform=fig.dpi_scale_trans)

figsize = fig.get_size_inches()
width = figsize[0]*25.4 # mm
fig.suptitle('Original figure width is %.2f mm - everything is scaled'%width)
fig.savefig('pippo.png', dpi=118, facecolor='#f8f8f0')

在此處輸入圖像描述

您將需要使用 Matplotlib 到 plot 這些圖表

您可以按照以下示例使用圖表創建自己的圖形:

import matplotlib.pyplot as plt

plt.subplot(1, 2, 1)  # Args ( Lines, Columns, Reference )
plt.plot(x, y, 'r')  # Reference will say what graph we are modding
plt.subplot(1, 2, 2)
plt.plot(y, x, 'g')
plt.show()

該代碼將創建一個如下圖:

在此處輸入圖像描述

您可以使用plt.xlabel('name')plt.ylabel('name')plt.title('name')來定義圖形的標簽和標題

注意:上面的代碼將創建一個帶有 2 個圖表的圖像,您可以在另一個代碼塊中使用此代碼來創建您想要的圖像。

您還可以使用以下代碼:

import matplotlib.pyplot as plt

fig, ax = plt.subplots(nrows=5, ncols=5, figsize=(5, 5))
ax[0, 0].plot(x, y)  # The method ax is now one array and is referred by indexes
ax[0, 0].set_title('Title')
ax[1, 1].plot(x, y)
ax[1, 1].set_title('Title')
plt.tight_layout()  # It will separate the graphs to avoid overlays
plt.show()

它將創建以下圖像:

在此處輸入圖像描述

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM