Matplotlib 颜色条 log2

Aka*_*ari 1 python matplotlib scatter-plot

我想知道如何使颜色条上的刻度显示为 log2。

import matplotlib.pyplot as plt
from matplotlib import ticker
x = np.arange(1000)
y = x.copy()
c = x.copy()
scatter_plot = plt.scatter(x, y, c=c, cmap='viridis', norm=matplotlib.colors.LogNorm())
formatter = ticker.LogFormatter(2)
cbar = plt.colorbar(scatter_plot, format=formatter)
plt.show()
Run Code Online (Sandbox Code Playgroud)

这给了我这个图像:
彩条图像

正如您所看到的,有一些额外的刻度,但它没有正确应用它们。我希望刻度显示为 log2。任何帮助表示赞赏。

Luc*_*rte 5

您需要使用SymLogNorm并传递参数base=2注释,您需要定义一个线性范围,其中绘图是线性的(以避免绘图在零附近趋于无穷大),更多信息请参见此处

scatter_plot = plt.scatter(x, y, c=c, cmap='viridis', 
                           norm=matplotlib.colors.SymLogNorm(linthresh=0.001,
                                                             base=2)
                          )

cbar = plt.colorbar(scatter_plot)
plt.show()
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

最后,请注意,由于您已经使用norm参数对数据进行标准化以匹配正确的颜色,因此使用 usingcbar = plt.colorbar()足以恢复正确的颜色条,因此传递 a 而不将格式化程序传递给颜色条。