20

matplotlib の図内の個々のサブプロットの周りに境界線を引く方法を知っている人はいますか? 私はパイプロットを使用しています。

例えば:

import matplotlib.pyplot as plt
f = plt.figure()
ax1 = f.add_subplot(211)
ax2 = f.add_subplot(212)
# ax1.set_edgecolor('black')

..しかし、Axesオブジェクトには「エッジカラー」がなく、図レベルからプロットの輪郭を描く方法も見つけられないようです。

私は実際に mpl コードをラップし、選択されたサブプロットに応じてコンテキストが必要なコントロールを含む wx UI を追加しています。つまり、ユーザーが Figure キャンバス内のサブプロットをクリックします -- サブプロットが「選択」されます (その周りにアウトラインが描かれ、理想的にはノコギリ歯です) -- その特定のサブプロットを変更するためのコントロールを表示するように GUI が更新されます。

4

2 に答える 2

14

基本的には、軸の外側に描画したいのですよね?

ここからこれを適応させました。ハードコーディングされた「fudge-factors」を使用したため、クリーンアップが必要です。

#!/usr/bin/env python
from pylab import *

def f(t):
    s1 = cos(2*pi*t)
    e1 = exp(-t)
    return multiply(s1,e1)

t1 = arange(0.0, 5.0, 0.1)
t2 = arange(0.0, 5.0, 0.02)
t3 = arange(0.0, 2.0, 0.01)

figure(figsize=(4, 4))
sub1 = subplot(211)
l = plot(t1, f(t1), 'bo', t2, f(t2), 'k--', markerfacecolor='green')
grid(True)
title('A tale of 2 subplots')
ylabel('Damped oscillation')

## I ADDED THIS
autoAxis = sub1.axis()
rec = Rectangle((autoAxis[0]-0.7,autoAxis[2]-0.2),(autoAxis[1]-autoAxis[0])+1,(autoAxis[3]-autoAxis[2])+0.4,fill=False,lw=2)
rec = sub1.add_patch(rec)
rec.set_clip_on(False)

subplot(212)
plot(t3, cos(2*pi*t3), 'r.')
grid(True)
xlabel('time (s)')
ylabel('Undamped')

savefig('test.png')

プロデュース:

ここに画像の説明を入力

于 2010-01-08T15:52:58.207 に答える
7

別の解決策は、パッチを個々の軸ではなくフィギュア キャンバスに直接配置することに関するSO のこの回答から導き出されます。Rectangle

import matplotlib.pyplot as plt
import numpy as np

fig, axes = plt.subplots(nrows=2, ncols=1)
axes[0].plot(np.cumsum(np.random.randn(100)))
axes[1].plot(np.cumsum(np.random.randn(100)))

rect = plt.Rectangle(
    # (lower-left corner), width, height
    (0.02, 0.5), 0.97, 0.49, fill=False, color="k", lw=2, 
    zorder=1000, transform=fig.transFigure, figure=fig
)
fig.patches.extend([rect])

plt.tight_layout()
plt.show()

結果:

ここに画像の説明を入力

于 2020-08-23T18:56:41.847 に答える