使用Python Matplotlib改变一个轴每个刻度的字体大小
我想要改变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()
这样就会得到这个图表:
这里有两点需要注意:
- 你可以通过循环主要刻度来设置每个刻度标签的大小(这就是
for
循环的作用。如果你有特定的坐标轴句柄,记得用它替代gca()
)。 - 你需要知道刻度的数量(否则,索引会出错,迟早会出现问题)。
如果你不想提前设置刻度,可以通过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])
,你会看到不同的效果。