定位颜色条 - Matplotlib

2 投票
2 回答
567 浏览
提问于 2025-04-18 13:54

我有一个图表,里面合并了两组数据。为了区分这两组数据,我需要显示两个不同的颜色条,每组数据一个。目前,我是这样绘制我的数据的:

plt.figure()

# Data 1
fig = plt.imshow(data1, interpolation='nearest', cmap='binary', vmin=0, vmax=1)

# Plotting just the nonzero values of data2
data2_x = numpy.nonzero(data2)[0]
data2_y = numpy.nonzero(data2)[1]

pts = plt.scatter(data2_x, data2_y, marker='s', c=data2[data2_x, data2_y])

plt.colorbar(pts)
plt.colorbar(fig, orientation="horizontal")

这是我得到的图表:

在这里输入图片描述

不过,我想把颜色条的位置调整一下,想要的效果是这样的(用Photoshop做的):

在这里输入图片描述

这样做有可能吗?

提前谢谢你。

2 个回答

0

你可以通过ax这个关键词把颜色条和坐标轴连接起来,plt.gca()可以让你获取当前的坐标轴:

plt.colorbar(object1, ax=plt.gca())
4

可能最简单的方法就是手动设置颜色条的位置(通过 cbax = fig.add_axes([....]))。然后你可以把这个位置传给颜色条的调用:

大概是这样的:

from matplotlib import pyplot as plt
import numpy as np

fig = plt.figure(figsize=(8, 8))
ax = fig.add_axes([.1, .1, .8, .8])
im = ax.imshow(np.random.rand(150, 150), cmap='gray', interpolation='none')
sc = ax.scatter(2 + 146 * np.random.rand(150), 2 + 146 * np.random.rand(150),
                c=np.random.rand(150), cmap='Accent', s=50, lw=0)

ax_cb1 = fig.add_axes([.1, .05, .8, .02])
ax_cb2 = fig.add_axes([.92, .1, .02, .8])

cb1 = fig.colorbar(im, cax=ax_cb1, orientation='horizontal')
cb1.ax.xaxis.set_label_position('top')
cb2 = fig.colorbar(sc, cax=ax_cb2, orientation='vertical')

在这里输入图片描述

撰写回答