格式化matplotlib中的坐标轴刻度标签并添加字符串值

3

我想将我的xtick和ytick值格式化为带有两位小数的浮点数,并在末尾添加“%”符号。我该如何做?

x_sum = cm.sum(axis=0)*100
y_sum = cm.sum(axis=1)*100
plt.xticks(tick_marks, x_sum)
plt.yticks(tick_marks, y_sum)

目前,时间戳会给我一长串小数值。

2个回答

8

从问题中可以看出,您无论如何都希望手动设置刻度,因此您只需要格式化刻度标签即可。

import numpy as np
import matplotlib.pyplot as plt

cm = np.sort(np.random.rand(64)).reshape((8,8))
tick_marks=np.arange(8)

plt.imshow(cm)

x_sum = cm.sum(axis=0)*100
y_sum = cm.sum(axis=1)*100

fmt = lambda x: "{:.2f}%".format(x)

plt.xticks(tick_marks, [fmt(i) for i in x_sum], rotation=90)
plt.yticks(tick_marks, [fmt(i) for i in y_sum])

plt.tight_layout()
plt.show()

enter image description here

对于自动百分比标签,使用matplotlib.ticker.PercentFormatter是有意义的:

import numpy as np
import matplotlib.pyplot as plt
from matplotlib.ticker import PercentFormatter

cm = np.sort(np.random.rand(64)).reshape((8,8))

plt.imshow(cm, extent=(0,80,0,80))

plt.gca().xaxis.set_major_formatter(PercentFormatter(decimals=2))
plt.gca().yaxis.set_major_formatter(PercentFormatter(decimals=2))

plt.gca().tick_params(axis="x",rotation=90)
plt.tight_layout()
plt.show()

enter image description here


4

定义刻度标签的格式的一种简洁方法是创建自己的刻度标签格式化程序。这可以通过利用matplotlib的FuncFormatter实现。

from matplotlib.ticker import FuncFormatter
from matplotlib import pyplot as plt


def format_tick_labels(x, pos):
    return '{0:.2f}%'.format(x)

values = range(20)
f, ax = plt.subplots()

ax.xaxis.set_major_formatter(FuncFormatter(format_tick_labels))
ax.plot(values)

enter image description here


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接