首页 > 解决方案 > 彩条上的刻度重叠,因为值非常接近

问题描述

我试图在彩条的一个轴上显示精确值,在另一个轴上显示基本比例。但是,一些确切的值非常接近,它们的名称在颜色条上重叠。有没有办法让重叠的名称显示为列表或仅显示在其他值名称的旁边?我已经尝试过旋转标签,在颜色条方法中设置 vmin/vmax,并设置第二轴的 ylim。我不知道下一步该尝试什么。感觉这是 matplotlib 允许的,但我找不到允许这种操作的方法或 kwargs。许多被注释掉的 tlines 是我在 StackOverflow 上的许多帖子的帮助下所做的尝试。谢谢!!

为了清楚起见,删除了以前的代码

更新:这里的 Paul H 是一个可行的例子,我正在尝试解决同样的问题

# Make random data with same issue
x, y = np.linspace(-3, 1.5, 20), np.linspace(0, 0.5, 20)
# two different ranges used to simulate the same issue in my data
fake_phase = np.append(np.random.random_sample(15), np.arange(0.0, .005, 0.001))
fake_labels = np.array(['V439Oph', 'ALVir', 'YZVir', 'XXVir', 'V716Oph', 'BFSer', 'BLHer',
       'RXLib', 'CEHer', 'V465Oph', 'V1180Sgr', 'CSCas', 'DQAnd', 'IXCas',
       'UYEri', 'TWCap', 'AUPeg', 'MZCyg', 'SWTau', 'TXDel'], dtype=object)

# Plot data
fig, ax = plt.subplots(1,1,figsize=(15,10))
plt.tight_layout()
plt.plot(x, y, marker='.', ms=17, mew=2, linestyle='none')

# Make the same colorbar 
norm = cm.colors.Normalize(vmin=0.0, vmax=1.0, clip=False)
cbar = fig.colorbar(cm.ScalarMappable(norm=norm, cmap='rainbow'), ax=ax, extend='both', 
                    orientation='vertical', pad=0.005, use_gridspec=True)
cbar.set_ticks(fake_phase)
cbar.set_ticklabels(fake_labels)

cbar.ax.tick_params(which='major', labelsize='large', width=1.5, length=6)
cbar.set_label(label='Phase', size='xx-large', labelpad=40)

cbar.ax.set_aspect('auto')
ax2 = cbar.ax.twinx()
pos = cbar.ax.get_position()
pos.x0 += 0.1
ax2.set_position(pos)

plt.show();

此代码的输出:可行示例的输出

我的问题是颜色条上的辅助轴(左轴)的值非常接近,它们的标签重叠。我希望找到一种方法来分隔标签,以便它们可读。我想我找到了一种方法来使用axis.set_ticklabels()(set_ticklabels()文档来完成此操作。在文档的** kargs部分中,它使用文本属性引用。在文本属性文档文本属性文档中,属性'y'说您可以设置文本的 y 位置。但是,当我将此关键字添加到 set_ticklabels() 时,我收到一个错误,即无法识别该关键字。我尝试将属性“y”添加为关键字和属性,但是我收到关键字错误或没有该属性错误...

我称该属性错误,但我在编辑这些参数时从未得到过详细信息。老实说,我不知道这是否是解决此问题的最佳方法,但这是迄今为止我得到的最接近的方法。我希望用它来偏移标签,以便它们以相同的顺序垂直堆叠在一起,但距离足够远,标签可读。

感谢您的任何意见!

标签: python-3.xmatplotlibcolorbar

解决方案


推荐阅读