[英]White background for colorbar placed inside the figure
如何使用 matplotlib 和 python 将白色背景添加到放置在图中(左下角)内的颜色条?
为了更好地解释我的问题,我提供了一个小例子和一张图片。
非常感谢您的建议!
import numpy as np
import matplotlib.cm as cm
import matplotlib.pyplot as plt
from mpl_toolkits.axes_grid1.inset_locator import inset_axes
from matplotlib.collections import PatchCollection
from matplotlib.patches import Ellipse
num_rects = 1000
plt_size = 10.0
diam_max = 1.0
coordinates = np.random.random(size=(num_rects, 2)) * plt_size
angles = np.random.random(size=(num_rects, 1)) * 180.0
colors = np.random.random(size=(num_rects, 1)) * num_rects
ellipsis = []
for c, a in zip(coordinates, angles):
el = Ellipse(xy=c, width=diam_max, height=diam_max/2, angle=float(a))
ellipsis.append(el)
pc = PatchCollection(ellipsis, cmap=cm.jet, edgecolors='black', linewidths=0.5)
pc.set_array(colors[:, 0])
fig, ax = plt.subplots(figsize=(plt_size, plt_size))
ax.add_collection(pc)
ax.set_xlim(0, plt_size)
ax.set_ylim(0, plt_size)
cax = inset_axes(ax, width='3%', height='20%', loc='lower left')
cax.grid(False)
fig.colorbar(pc, cax=cax, orientation="vertical")
fig.show()
尝试这个
cbbox = inset_axes(ax, width='10%', height='20%', loc='lower left')
[cbbox.spines[k].set_visible(False) for k in cbbox.spines]
cbbox.tick_params(axis='both', left=False, top=False,
right=False, bottom=False, labelleft=False,
labeltop=False, labelright=False, labelbottom=False)
cbbox.set_facecolor([1,1,1,1])
cax = inset_axes(cbbox, '30%', '95%', loc = 6)
对于那些对自动缩放背景宽度的解决方案感兴趣的人:这可以通过字典来完成:
import numpy as np
import matplotlib.cm as cm
import matplotlib.ticker as ti
import matplotlib.pyplot as plt
from mpl_toolkits.axes_grid1.inset_locator import inset_axes
from matplotlib.collections import PatchCollection
from matplotlib.patches import Ellipse
num_rects = 1000
plt_size = 10.0
diam_max = 1.0
coordinates = np.random.random(size=(num_rects, 2)) * plt_size
angles = np.random.random(size=(num_rects, 1)) * 180.0
colors = np.random.random(size=(num_rects, 1)) * num_rects
ellipsis = []
for c, a in zip(coordinates, angles):
el = Ellipse(xy=c, width=diam_max, height=diam_max/2, angle=float(a))
ellipsis.append(el)
pc = PatchCollection(ellipsis, cmap=cm.jet, edgecolors='black', linewidths=0.5)
pc.set_array(colors[:, 0])
fig, ax = plt.subplots(figsize=(plt_size, plt_size))
ax.add_collection(pc)
ax.set_xlim(0, plt_size)
ax.set_ylim(0, plt_size)
dict_cbox_width = {2: '5%', 3: '6%', 4: '7%', 5: '8%', 6: '9%'}
ticking = ti.AutoLocator()
cb_ticks_max_len = max([len(str(t)) for t in ticking.tick_values(colors.min(), colors.max())])
cbox = inset_axes(ax, width=dict_cbox_width[cb_ticks_max_len], height='20%', loc='lower left')
[cbox.spines[k].set_visible(False) for k in cbox.spines]
cbox.tick_params(axis='both', left=False, right=False, bottom=False, top=False,
labelleft=False, labeltop=False, labelright=False, labelbottom=False)
cbox.set_facecolor([1, 1, 1, 1])
cax = inset_axes(cbox, width='20%', height='90%', loc='center left')
cax.grid(False)
cb = fig.colorbar(pc, cax=cax, orientation="vertical")
cb.ax.set_ylim([cb.ax.get_yticks()[0], cb.ax.get_yticks()[-1]])
fig.show()
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.