Как изменить ширину графика с помощью цветовой шкалы в мультиплоте? - PullRequest
2 голосов
/ 03 февраля 2020

У меня проблема с цветной полосой в мультиплоте. Эти два графика не выровнены, когда я добавляю цветную полосу. Если я уберу цветную полосу, графики будут хорошо выровнены.

Как изменить размеры графиков в мультиплоте? Я просто хочу изменить ширину нижнего или верхнего графика в oder, чтобы выровнять графики. Вот мой код.

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

fig = plt.subplots(2,figsize=(5, 8))
gs  = gridspec.GridSpec(2, 1, height_ratios=[ 3,2],hspace=0.0)

ax1 = plt.subplot(gs[0])
ax2 = plt.subplot(gs[1])

xx   = np.linspace(0,5,50)
yy   = np.linspace(0,5,50)
X, Y = np.meshgrid(xx, yy)
T = X**2 

norm = mpl.colors.Normalize(vmin=0,vmax=10)
pcm=ax1.pcolormesh(X,Y,T, norm =norm)
plt.colorbar(pcm, orientation="vertical", ax =ax1)

ax2.plot(xx, xx**2)

И вот результат.

the result

Ответы [ 3 ]

3 голосов
/ 03 февраля 2020

Вы также можете попробовать горизонтальную полосу.

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

fig = plt.subplots(2,figsize=(5, 8))
gs  = gridspec.GridSpec(2, 1, height_ratios=[ 3,2],hspace=0.0)

ax1 = plt.subplot(gs[0])
ax2 = plt.subplot(gs[1])

xx   = np.linspace(0,5,50)
yy   = np.linspace(0,5,50)
X, Y = np.meshgrid(xx, yy)
T = X**2 

norm = mpl.colors.Normalize(vmin=0,vmax=10)
pcm=ax1.pcolormesh(X,Y,T, norm =norm)
plt.colorbar(pcm, orientation="horizontal", ax =ax1, pad=0.1)

ax2.plot(xx, xx**2)

enter image description here

2 голосов
/ 03 февраля 2020

От Позиционируя цветную полосу ответом, мы можем добавить новую ось без сетки spe c

import numpy as np
import matplotlib.pyplot as plt
%matplotlib inline

fig = plt.figure(figsize=(5,8))
ax1 = fig.add_subplot(211)  #Create 2x1 grid and declare ax1 as first plot
ax2 = fig.add_subplot(212)  #Create 2x1 grid and declare ax2 as second plot

xx   = np.linspace(0,5,50)
yy   = np.linspace(0,5,50)
X, Y = np.meshgrid(xx, yy)
T = X**2 

norm = mpl.colors.Normalize(vmin=0,vmax=10)
pcm=ax1.pcolormesh(X,Y,T, norm =norm)

cbaxes = fig.add_axes([0.95, 0.53, 0.03, 0.35]) #Add position (left, bottom, width, height)
cb = plt.colorbar(pcm, cax = cbaxes) 
ax2.plot(xx, xx**2)

Вывод

enter image description here

0 голосов
/ 03 февраля 2020

Кажется, у меня есть решение. Но я просто добавляю свою ось и помещаю цветную полосу на эту определенную ось. Я все еще задаюсь вопросом, как легко сделать этот вид сюжета.

fig  = plt.figure(2,figsize=(5, 8))
gs   = gridspec.GridSpec(2, 1, height_ratios=[ 3,2],hspace=0.0)

axes = fig.add_axes([0.25,0.425,0.78,0.455])

ax1  = plt.subplot(gs[0])
ax2  = plt.subplot(gs[1])

xx   = np.linspace(0,5,50)
yy   = np.linspace(0,5,50)
XX, YY = np.meshgrid(xx, yy)

TY = XX**2 
norm = mpl.colors.Normalize(vmin=0,vmax=10)
pcm =ax1.pcolormesh(XX,YY,TY, norm =norm)

plt.colorbar(pcm, orientation="vertical", ax =axes);

ax2.plot(xx, xx**2);

Вот лучший сюжет.

enter image description here

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