matplotlib colorbar tick标签格式

时间:2016-03-01 16:49:54

标签: python text matplotlib plot colorbar

我想知道如何在matplotlib中显式设置colorbar对象的格式

以下是绘制脚本的示例:

app.get("/:notFoundUrl+") { (request:Request<AnyContent>)->Action<AnyContent> in
   print(request.params["notFoundUrl"])
   return Action<AnyContent>.render("index", context: ["hello": "Page Not Found: " + request.params["notFoundUrl"]!])
}

这给了我这样的输出:

enter image description here

目前,colorbar tick标签格式将使用前面提供的格式字符串:from matplotlib import pyplot from matplotlib.ticker import MultipleLocator, FormatStrFormatter from matplotlib.colors import BoundaryNorm from matplotlib.ticker import MaxNLocator from pylab import * import numpy as np import random # ---------- plot_aspect = 1.2 plot_height = 10.0 plot_width = int(plot_height*plot_aspect) # ---------- pyplot.figure(figsize=(plot_width, plot_height), dpi=100) pyplot.subplots_adjust(left=0.10, right=1.00, top=0.90, bottom=0.06, hspace=0.30) subplot1 = pyplot.subplot(111) # ---------- cbar_max = 40.0 cbar_min = 20.0 cbar_step = 1.0 cbar_num_colors = 200 cbar_num_format = "%d" # ---------- # make random dataset dx, dy = 5.0, 5.0 y, x = np.mgrid[slice(-100.0, 100.0 + dy, dy),slice(-100.0, 100.0 + dx, dx)] z = [] for i in x: z.append([]) for j in y: z[-1].append(random.uniform(cbar_min,cbar_max)) # ---------- # make random dataset levels = MaxNLocator(nbins=cbar_num_colors).tick_values(cbar_min, cbar_max) cmap = pyplot.get_cmap('gist_ncar') norm = BoundaryNorm(levels, ncolors=cmap.N, clip=True) pp = pyplot.contourf(x,y,z,levels=levels,cmap=cmap) cbar = pyplot.colorbar(pp, orientation='vertical', ticks=np.arange(cbar_min, cbar_max+cbar_step, cbar_step), format=cbar_num_format) cbar.ax.set_ylabel('Color Scale [unit]', fontsize = 16, weight="bold") CS = pyplot.contour(x,y,z, alpha=0.5) majorLocator1 = MultipleLocator(10) majorFormatter1 = FormatStrFormatter('%d') minorLocator1 = MultipleLocator(5) subplot1.xaxis.set_major_locator(majorLocator1) subplot1.xaxis.set_major_formatter(majorFormatter1) subplot1.xaxis.set_minor_locator(minorLocator1) pyplot.xticks(fontsize = 16) pyplot.xlim(-100.0,100.0) majorLocator2 = MultipleLocator(10) majorFormatter2 = FormatStrFormatter('%d') minorLocator2 = MultipleLocator(5) subplot1.yaxis.set_major_locator(majorLocator2) subplot1.yaxis.set_major_formatter(majorFormatter2) subplot1.yaxis.set_minor_locator(minorLocator2) pyplot.yticks(fontsize = 16) pyplot.ylim(-100.0,100.0) subplot1.xaxis.grid() subplot1.yaxis.grid() subplot1.axes.set_aspect('equal') pyplot.suptitle('Main Title', fontsize = 24, weight="bold") pyplot.xlabel('X [unit]', fontsize=16, weight="bold") pyplot.ylabel('Y [unit]', fontsize=16, weight="bold") pyplot.show() pyplot.close() ,但我还想使用以下方式设置字体大小和重量:

cbar_num_format = "%d"

...但是当我这样做时,之前应用的格式化程序字符串似乎消失了,而且数字又以cbar.ax.set_yticklabels(np.arange(cbar_min, cbar_max+cbar_step, cbar_step), fontsize=16, weight='bold') 格式返回,而不是我之前应用的"%0.1f"

enter image description here

如何以更好的方式防止这种情况发生或控制色条标签?

4 个答案:

答案 0 :(得分:5)

一种选择是手动格式化ticklabels。可能有更好的方法,但这通常对我有用。

cbar.ax.set_yticklabels(['{:.0f}'.format(x) for x in np.arange(cbar_min, cbar_max+cbar_step, cbar_step)], fontsize=16, weight='bold')

编辑:

如果您不想自己弄清楚,可以使用:

for l in cbar.ax.yaxis.get_ticklabels():
    l.set_weight("bold")
    l.set_fontsize(16)

如果未正确更新,您可能需要致电draw()。这可以减少为一个衬里:

setp(cbar.ax.yaxis.get_ticklabels(), weight='bold', fontsize=16)

答案 1 :(得分:1)

只需将其更改为

cbar.ax.set_yticklabels(np.arange(int(cbar_min), int(cbar_max+cbar_step), int(cbar_step)), fontsize=16, weight='bold')

诀窍!!!

即。只需将int()提供给np.arange()

中的cbar.ax.set_yticklabels值即可

enter image description here

答案 2 :(得分:1)

在这里,我将颜色条刻度设置为百分比格式。

import numpy as np
import matplotlib.pyplot as plt

xs = np.linspace(0, 1, 20)
ys = xs ** 3
colors = xs ** 2
scatter = plt.scatter(xs, ys, c=colors)

cb = plt.colorbar(scatter)
cb.ax.set_yticklabels(["{:.1%}".format(i) for i in cb.get_ticks()]) # set ticks of your format

plt.show()

Scatter plot

您还可以手动设置刻度位置。

ticks = np.linspace(0, 1, 5)
cb = plt.colorbar(scatter, ticks=ticks)
cb.ax.set_yticklabels(["{:.1%}".format(i) for i in ticks]) # set ticks of your format

在此示例中,我使用了python 3.7matplotlib 3.1.2

答案 3 :(得分:0)

更好的解决方案是

from matplotlib.ticker import FuncFormatter

fmt = lambda x, pos: '{:.1%}'.format(x)
cbar = plt.colorbar(format=FuncFormatter(fmt))