Matplotlib ukuran yang berbeda subplot

Saya perlu menambahkan dua subplot untuk angka. Salah satu subplot perlu sekitar tiga kali lebih lebar dari yang kedua (sama tinggi). Saya capai ini menggunakan GridSpec dan colspan argumen tapi aku ingin melakukan ini dengan menggunakan sosok jadi saya bisa menyimpan ke PDF. Saya dapat menyesuaikan angka pertama menggunakan figsize argumen dalam konstruktor, tapi bagaimana saya mengubah ukuran plot kedua?

Mengomentari pertanyaan (1)
Larutan

Cara lain adalah dengan menggunakan subplot fungsi dan lulus rasio lebar dengan gridspec_kw:

import numpy as np
import matplotlib.pyplot as plt 

# generate some data
x = np.arange(0, 10, 0.2)
y = np.sin(x)

# plot it
f, (a0, a1) = plt.subplots(1, 2, gridspec_kw={'width_ratios': [3, 1]})
a0.plot(x, y)
a1.plot(y, x)

f.tight_layout()
f.savefig('grid_figure.pdf')
Komentar (8)

Anda dapat menggunakan gridspec dan angka:

import numpy as np
import matplotlib.pyplot as plt 
from matplotlib import gridspec

# generate some data
x = np.arange(0, 10, 0.2)
y = np.sin(x)

# plot it
fig = plt.figure(figsize=(8, 6)) 
gs = gridspec.GridSpec(1, 2, width_ratios=[3, 1]) 
ax0 = plt.subplot(gs[0])
ax0.plot(x, y)
ax1 = plt.subplot(gs[1])
ax1.plot(y, x)

plt.tight_layout()
plt.savefig('grid_figure.pdf')

Komentar (0)

Mungkin cara paling sederhana adalah dengan menggunakan subplot2grid, yang dijelaskan dalam Menyesuaikan Lokasi Subplot Menggunakan GridSpec.

ax = plt.subplot2grid((2, 2), (0, 0))

sama dengan

import matplotlib.gridspec as gridspec
gs = gridspec.GridSpec(2, 2)
ax = plt.subplot(gs[0, 0])

jadi bmu's contoh menjadi:

import numpy as np
import matplotlib.pyplot as plt

# generate some data
x = np.arange(0, 10, 0.2)
y = np.sin(x)

# plot it
fig = plt.figure(figsize=(8, 6))
ax0 = plt.subplot2grid((1, 3), (0, 0), colspan=2)
ax0.plot(x, y)
ax1 = plt.subplot2grid((1, 3), (0, 2))
ax1.plot(y, x)

plt.tight_layout()
plt.savefig('grid_figure.pdf')
Komentar (0)

Saya menggunakan pyplot's sumbu objek untuk secara manual menyesuaikan ukuran tanpa menggunakan GridSpec:

import matplotlib.pyplot as plt
import numpy as np
x = np.arange(0, 10, 0.2)
y = np.sin(x)

# definitions for the axes
left, width = 0.07, 0.65
bottom, height = 0.1, .8
bottom_h = left_h = left+width+0.02

rect_cones = [left, bottom, width, height]
rect_box = [left_h, bottom, 0.17, height]

fig = plt.figure()

cones = plt.axes(rect_cones)
box = plt.axes(rect_box)

cones.plot(x, y)

box.plot(y, x)

plt.show()
Komentar (2)