【问题标题】:Spread custom tick labels evenly over colorbar在颜色条上均匀分布自定义刻度标签
【发布时间】:2020-05-14 09:43:27
【问题描述】:

我正在尝试使用 pyplot 将自定义颜色条添加到我的热图中。 我的代码如下所示:

c_map = mpl.colors.ListedColormap(['#c7e9b4','#7fcdbb','#ffffff','#41b6c4','#225ea8','#253494'])
sm = plt.cm.ScalarMappable(cmap=c_map)
cbar = plt.colorbar(sm, ticks=np.arange(6), label='Change in user population')
cbar.ax.set_yticklabels(['<=-6', '<= -1', '0', '<= 3', '<= 6', '7>='])

这当前会产生以下颜色条: Wrong colorbar

从图片中可以看出,六个刻度标签中只有两个显示在栏的底部和顶部。但是,按照其他人使用的方法,我希望ticks=np.arange(6) 在将刻度标签更改为指定的字符串值之前将六个标签均匀地分布在颜色条上。

我正在寻找一种快速而简单的方法来解决这个问题,因为这是我需要制作的唯一可视化地图。我已经找了好几个小时没有成功解决这个问题,所以请帮助这个初学者程序员。

【问题讨论】:

  • 颜色条的范围从 0 到 1。您可以根据颜色的数量计算刻度的放置位置。
  • 哪个matplotlib?在更新的版本上,颜色条不应再变为 0-1

标签: python matplotlib colorbar colormap


【解决方案1】:

刻度的轴在 0(底部)到 1(顶部)的范围内。 将空间平均分成 6 个部分将标记每个颜色区域的底部。添加一半将很好地位于中心。因此,ticks=np.linspace(0,1,6,endpoint=False) + 1/12。或者,等效地,ticks=(np.arange(6)+1/2)/6

您可以通过将刻度线的长度设置为零来移除刻度线:cbar.ax.axes.tick_params(length=0)

要获得正确的less than or equal,可以选择在TeX format 中添加标签。如r'$\leq-6$'

一些演示代码:

import matplotlib as mpl
import matplotlib.pyplot as plt
import numpy as np

c_map = mpl.colors.ListedColormap(['#c7e9b4','#7fcdbb','#ffffff','#41b6c4','#225ea8','#253494'])
sm = plt.cm.ScalarMappable(cmap=c_map)
cbar = plt.colorbar(sm, ticks=np.linspace(0, 1, 6, endpoint=False) + 1/12, label='Change in user population')
cbar.ax.set_yticklabels([r'$\leq-6$', r'$\geq-1$', '$0$', r'$\leq3$', r'$\leq6$', r'$\geq7$'])
cbar.ax.axes.tick_params(length=0)
plt.show()

【讨论】:

  • 也可以。 (Python 字符串是 unicode!)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-10-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-04-25
  • 2016-06-14
相关资源
最近更新 更多