我想制作一个图表矩阵,在每行/每列中我将绘制相应的条形图。基本上它看起来像
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"。
你知道怎么做吗?
答案 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()
如果我们已经有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()
(关于行标签的-45点偏移的侧注:如果我们需要,我们可以计算出来,但是暂时我将其关闭并且仅为matplotlib默认值修复它。)