我正在使用plr.scatter和logariphmic scale,我正在尝试向颜色栏添加一些特定的刻度值,但它似乎工作得非常随意。请参见示例:
import numpy as np
import matplotlib.pyplot as plt
from matplotlib import cm
import matplotlib
from matplotlib.ticker import LogFormatter
x, y = np.meshgrid(np.linspace(0, 1, 30), np.linspace(0, 1, 30))
z = x**2 + 15*y**3 + 1.5
plt.figure(figsize=(9, 4.5))
plt.scatter(x, y, c=z, cmap=cm.jet, norm=matplotlib.colors.LogNorm(), vmin=1, vmax=20)
formatter = LogFormatter(10, labelOnlyBase=False)
cbar = plt.colorbar(ticks=[1, 2, 5, 10, 15, 20], format=formatter)
这段代码生成了所有必需的主刻度,加上一些小刻度,但只标记为1和10,而我需要在colorbar中看到所有数字。起初我认为这是因为1和10是10的整数幂,而其他数字不是,但是
…如果我将日志基数更改为2,我们可以看到1和2处的刻度标签,它们是2的幂,但我们也可以看到5、10和20处的标签,它们不是。15次也没有出现,但如果我尝试添加17次,效果会很好(图片上没有显示,但确实显示了)
formatter = LogFormatter(2, labelOnlyBase=False)
这是什么魔法?我如何让matplotlib添加我想要的标签?我可以使用
cbar.ax.set_yticklabels(['1', '2', '5', '10', '15', '20'])
但这似乎是多余的。有更好的办法吗
您可以使用
formatter
格式化any axis
记号。下面是一个例子相关问题 更多 >
编程相关推荐