如何标记图表矩阵的行/列?

时间:2014-07-17 22:20:44

标签: python matplotlib

我想制作一个图表矩阵,在每行/每列中我将绘制相应的条形图。基本上它看起来像

import matplotlib.pyplot as plt
fig, axarr = plt.subplots(3,3)
for i in range(3):
    for j in range(3):
        axarr[i,j].bar([1,2,3], [1,3,7])
    plt.tight_layout()

现在我还要标记左侧的行和顶部的列。就像一个表格,列标题可能是" a"," b"," c"行可能是" d"," e"," f"。

你知道怎么做吗?

1 个答案:

答案 0 :(得分:2)

您可以使用/滥用标题和ylabels,或者,如果您已经使用了标题,请使用annotate将文本放置在距离轴顶部/左侧固定的偏移处。

作为两者的例子:

import matplotlib.pyplot as plt
import numpy as np

fig, axes = plt.subplots(nrows=3, ncols=3, sharex=True, sharey=True)

for ax in axes.flat:
    ax.bar(range(5), np.random.random(5), color=np.random.random((5,3)))

for ax, col in zip(axes[0,:], ['A', 'B', 'C']):
    ax.set_title(col, size=20)
for ax, row in zip(axes[:,0], ['D', 'E', 'F']):
    ax.set_ylabel(row, size=20)

plt.show()

enter image description here

如果我们已经有ylabels等,您可以使用注释来放置行/列标签。 annotate是一种简单的方法,允许文本在距离轴的边/中心/等点(在许多其他事物中)之间的位置固定偏移。 See this page(以及其他几位)了解有关annotate

的更多信息
import matplotlib.pyplot as plt
import numpy as np

fig, axes = plt.subplots(nrows=3, ncols=3, sharex=True, sharey=True)

for ax in axes.flat:
    ax.bar(range(5), np.random.random(5), color=np.random.random((5,3)))
    ax.set(xlabel='X-axis', ylabel='Y-axis')

for ax, col in zip(axes[0,:], ['A', 'B', 'C']):
    ax.annotate(col, (0.5, 1), xytext=(0, 10), ha='center', va='bottom',
                size=20, xycoords='axes fraction', textcoords='offset points')

for ax, row in zip(axes[:,0], ['D', 'E', 'F']):
    ax.annotate(row, (0, 0.5), xytext=(-45, 0), ha='right', va='center',
                size=20, rotation=90, xycoords='axes fraction',
                textcoords='offset points')

plt.show()

enter image description here

(关于行标签的-45点偏移的侧注:如果我们需要,我们可以计算出来,但是暂时我将其关闭并且仅为matplotlib默认值修复它。)