[英]Save colorbar for scatter plot separately
我有带有colorbar的散点图,我将其另存为PNG图像。 我需要该图具有一定的figsize,但要添加颜色条缩放原始图。
import pylab as plt
plt.figure(figsize=FIGSIZE)
plt.scatter(X, Y, c=Z, s=marker_size, norm=LogNorm(), vmin=VMIN, vmax=VMAX, cmap=CMAP,rasterized=True,lw=0,)
CB = plt.colorbar(ticks=TICKS, format=FORMAT)
如何将原始图(按上述设置figsize)和颜色栏保存为两个单独的图像?
显而易见的答案是“分别绘制颜色栏”。 您需要创建一个新的图形窗口并在其中绘制颜色栏,以防止您的第一个图形变形。 小例子:
import matplotlib.pyplot as plt
import numpy as np # only for dummy data
X,Y = np.mgrid[-2:3,-2:3]
Z = np.random.rand(*X.shape)
FIGSIZE = (2,3)
plt.figure(figsize=FIGSIZE)
mpb = plt.pcolormesh(X,Y,Z,cmap='viridis')
# plot the original without a colorbar
plt.savefig('plot_nocbar.png')
# plot a colorbar into the original to see distortion
plt.colorbar()
plt.savefig('plot_withcbar.png')
# draw a new figure and replot the colorbar there
fig,ax = plt.subplots(figsize=FIGSIZE)
plt.colorbar(mpb,ax=ax)
ax.remove()
plt.savefig('plot_onlycbar.png')
# save the same figure with some approximate autocropping
plt.savefig('plot_onlycbar_tight.png',bbox_inches='tight')
考虑生成的以下四个图(单击以正确查看):
第一个是该图的保存版本,未调用colormap
。 很好,这就是您要保留的内容。 第二colorbar
图显示了如果我们在不加任何额外大惊小怪的情况下调用colorbar
会发生什么:它colorbar
原始图占用一些空间,这就是您要防止的。
您必须使用plt.subplots
打开一个新图形(和轴),其大小为原始图形的大小。 这样,您可以确保产生的颜色条的大小与原始图形中绘制的颜色条相同。 在上面的设置中,我让matplotlib
确定颜色条本身的大小。 但是之后,我们需要删除会污染结果图的辅助轴。 (另一种选择是在新图形中手动创建单个轴,并使用颜色条的预期大小。我怀疑这不是可行的操作。)
现在,如您在第三幅图中看到的那样,在结果图中可以清楚地看到在删除的轴之后留下的空白空间(但是,相应地,颜色栏的大小是完美的)。 您可以在后期制作中手动切断此空白区域,也可以使用可以自动裁剪彩条图像的内容。
我还包括一个版的情节,其中matplotlib本身作物大部分人物组成: bbox_inches='tight'
的关键字参数savefig
正是这样做的。 好的方面是,生成的图像文件仅包含颜色条(如上面的第四幅图像所示),但是生成的颜色条的大小将与原始颜色条略有不同。 根据您的特定需求,您将需要尝试可用的方法来提出最适合您的解决方案。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.