强制水平和垂直颜色条与轴具有相同的大小
enforce that horizontal and vertical colorbar have same size as axes
前景中有散点图和附加等高线图。对于两者,我都想在主图旁边绘制相应的颜色条。不幸的是,我无法强制执行正确大小的颜色条。我试过了
divider = make_axes_locatable(ax)
cax_r = divider.append_axes("right", size="5%", pad=0.05)
cax_hor = divider.append_axes("bottom", size="5%", pad=0.15)
但无法正确应用此信息。我的代码生成了不需要的大小的颜色条如下:
import matplotlib as mpl
params = {
'figure.figsize' : [5.0, 4.0],
'legend.fontsize' : 12,
'text.usetex' : True,
'xtick.major.size' : 6,
'xtick.minor.size' : 4,
'ytick.major.size' : 6,
'ytick.minor.size' : 4
}
mpl.rcParams.update(params)
mpl.rcParams.update({'figure.autolayout': True})
import matplotlib.pyplot as plt
import numpy as np
import pylab as pl
import math
import scipy.interpolate
import os
from mpl_toolkits.axes_grid1 import make_axes_locatable
from glob import glob
xax = r'$\mu $'
yax = r'$\nu $'
a = np.genfromtxt(r'data.dat', usecols = (0), unpack=True)
b = np.genfromtxt(r'data.dat', usecols = (1), unpack=True)
r = np.genfromtxt(r'data.dat', usecols = (4), unpack=True)
p = np.genfromtxt(r'data.dat', usecols = (5), unpack=True)
N = 100 #number of points for plotting/interpolation
a_new = np.linspace(-22.0, 22.0, N)
b_new = np.linspace(-22.0, 22.0, N)
r_new = scipy.interpolate.griddata( (a, b), r,\
(a_new[None,:], b_new[:,None]), method='cubic')
p_new = scipy.interpolate.griddata( (a, b), p,\
(a_new[None,:], b_new[:,None]), method='cubic')
fig = plt.figure()
ax = plt.gca()
CS = plt.contour(a_new, b_new, r_new, zorder=+1)
#divider = make_axes_locatable(ax)
#cax_r = divider.append_axes("right", size="5%", pad=0.05)
#cax_hor = divider.append_axes("bottom", size="5%", pad=0.15)
colorbar_contour = plt.colorbar(CS, orientation='horizontal')
p_scat = ax.scatter(a, b, marker='.', s=7, linewidths=0, c=p, cmap= \
plt.get_cmap('jet'), zorder=-1)
colorbar_scatter = plt.colorbar(p_scat, orientation='vertical')
pl.xlim([-35.0, 35.0])
pl.ylim([-35.0, 35.0])
plt.xlabel(xax)
plt.ylabel(yax)
plt.show()
谁能告诉我(尊重我糟糕的python技能)如何正确使用'devider.append_axes()',或者解释另一种方法?
提前致谢
最简单的方法就是明确地构造坐标轴,使用 plt.axes
or fig.add_axes
——两者都接受一个 list/tuple 的 4 个参数,[left, bottom, width, height]
在图中的分数大小(默认)。
然后您可以在使用 cax
参数构造颜色条时使用这些轴:
cbar_ax = fig.add_axes([...])
cbar = plt.colobar(..., cax=cbar_ax)
前景中有散点图和附加等高线图。对于两者,我都想在主图旁边绘制相应的颜色条。不幸的是,我无法强制执行正确大小的颜色条。我试过了
divider = make_axes_locatable(ax)
cax_r = divider.append_axes("right", size="5%", pad=0.05)
cax_hor = divider.append_axes("bottom", size="5%", pad=0.15)
但无法正确应用此信息。我的代码生成了不需要的大小的颜色条如下:
import matplotlib as mpl
params = {
'figure.figsize' : [5.0, 4.0],
'legend.fontsize' : 12,
'text.usetex' : True,
'xtick.major.size' : 6,
'xtick.minor.size' : 4,
'ytick.major.size' : 6,
'ytick.minor.size' : 4
}
mpl.rcParams.update(params)
mpl.rcParams.update({'figure.autolayout': True})
import matplotlib.pyplot as plt
import numpy as np
import pylab as pl
import math
import scipy.interpolate
import os
from mpl_toolkits.axes_grid1 import make_axes_locatable
from glob import glob
xax = r'$\mu $'
yax = r'$\nu $'
a = np.genfromtxt(r'data.dat', usecols = (0), unpack=True)
b = np.genfromtxt(r'data.dat', usecols = (1), unpack=True)
r = np.genfromtxt(r'data.dat', usecols = (4), unpack=True)
p = np.genfromtxt(r'data.dat', usecols = (5), unpack=True)
N = 100 #number of points for plotting/interpolation
a_new = np.linspace(-22.0, 22.0, N)
b_new = np.linspace(-22.0, 22.0, N)
r_new = scipy.interpolate.griddata( (a, b), r,\
(a_new[None,:], b_new[:,None]), method='cubic')
p_new = scipy.interpolate.griddata( (a, b), p,\
(a_new[None,:], b_new[:,None]), method='cubic')
fig = plt.figure()
ax = plt.gca()
CS = plt.contour(a_new, b_new, r_new, zorder=+1)
#divider = make_axes_locatable(ax)
#cax_r = divider.append_axes("right", size="5%", pad=0.05)
#cax_hor = divider.append_axes("bottom", size="5%", pad=0.15)
colorbar_contour = plt.colorbar(CS, orientation='horizontal')
p_scat = ax.scatter(a, b, marker='.', s=7, linewidths=0, c=p, cmap= \
plt.get_cmap('jet'), zorder=-1)
colorbar_scatter = plt.colorbar(p_scat, orientation='vertical')
pl.xlim([-35.0, 35.0])
pl.ylim([-35.0, 35.0])
plt.xlabel(xax)
plt.ylabel(yax)
plt.show()
谁能告诉我(尊重我糟糕的python技能)如何正确使用'devider.append_axes()',或者解释另一种方法?
提前致谢
最简单的方法就是明确地构造坐标轴,使用 plt.axes
or fig.add_axes
——两者都接受一个 list/tuple 的 4 个参数,[left, bottom, width, height]
在图中的分数大小(默认)。
然后您可以在使用 cax
参数构造颜色条时使用这些轴:
cbar_ax = fig.add_axes([...])
cbar = plt.colobar(..., cax=cbar_ax)