使用Python Matplotlib改变一个轴每个刻度的字体大小

1 投票
1 回答
886 浏览
提问于 2025-04-18 14:38

我想要改变y轴上每个刻度的大小。
这些刻度是一些单词,我希望这些单词的大小能够根据它们所在行的总和来变化:如果总和大,就增大字体;如果总和小,就减小字体。我提到“行”是因为我的图表表示的是一个矩阵。

举个例子,我们可以想象“windows”这个词所在行的总和会比“police”这个词的总和要大。那么,怎么才能只增大“windows”这个刻度的字体,而不影响其他的呢?

我在使用Python 2.7.6的matplotlib 1.3.1版本。

不过,如果需要的话,我也愿意使用其他工具。

1 个回答

0

你可以通过循环遍历刻度(plt.gca().xaxis.get_major_ticks())来设置一些属性,像这样:

import matplotlib.pyplot as plt

MP_TICKSIZE = [10.0, 15.0, 20.0]

plt.subplot(111)

x = [1.0, 2.0, 3.0]
y = [1.0, 2.0, 3.0]

plt.plot(x,y)

plt.gca().set_xticks([t for t in x])

count = 0
for tick in plt.gca().xaxis.get_major_ticks():
    tick.label1.set_fontsize(MP_TICKSIZE[count])
    count += 1

plt.show()  

这样就会得到这个图表:

enter image description here

这里有两点需要注意:

  1. 你可以通过循环主要刻度来设置每个刻度标签的大小(这就是for循环的作用。如果你有特定的坐标轴句柄,记得用它替代gca())。
  2. 你需要知道刻度的数量(否则,索引会出错,迟早会出现问题)。

如果你不想提前设置刻度,可以通过len(plt.gca().xaxis.get_major_ticks())来获取刻度的数量。根据这个数字,你可以设置数组MP_TICKSIZE,例如:

import numpy as np

MP_TICKSIZE = np.random.rand(len(plt.gca().xaxis.get_major_ticks())) * 30.0

用这个替代plt.gca().set_xticks([t for t in x]),你会看到不同的效果。

撰写回答