繁体   English   中英

分别保存颜色条以用于散点图

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM