是否可以让一些轴标签覆盖 matplotlib 图中的多个列?
Is it possible to have some axis labels cover multiple columns in a matplotlib plot?
我正在使用 matplotlib 创建热图 plt.imshow
。
Y轴代表时间,按原样即可。
X 轴代表特征,是我要修改的特征。
一些特征是标签和列的 1:1 映射,即:
标签 length
仅与一列相关联
另一方面,一些特征是标签和列的 1:n 映射,即:
标签 colors
与三列相关联,每列代表一种颜色。
我想要实现的是让所有 1:n 标签跨越它们关联的列,如下所示:
|-------|-------|-------|-------|-------|
| | | | | |
|-------|-------|-------|-------|-------|
| | | | | |
|-------|-------|-------|-------|-------|
| | | | | |
|-------|-------|-------|-------|-------|
|_______|_______________________|_______|
| | |
Length Colors Size
这可能吗?
提前感谢您的帮助:-)
以下方法使用放大的次要刻度线进行分隔,使用主要刻度线放置刻度线标签。可选地,次刻度位置也可用于绘制网格线作为额外的分隔。
from matplotlib import pyplot as plt
from matplotlib.ticker import FixedLocator
import numpy as np
plt.imshow(np.random.uniform(0, 1, (5, 5)), cmap='inferno')
plt.tick_params(axis='x', which='major', length=0)
plt.tick_params(axis='x', which='minor', length=15)
plt.xticks([0, 2, 4], ['Length', 'Colors', 'Size'])
plt.gca().xaxis.set_minor_locator(FixedLocator([-0.5, 0.5, 3.5, 4.5]))
# plt.grid(axis='x', which='minor', color='white', lw=2)
plt.show()
PS:次要刻度和主要刻度的位置可以从宽度数组计算:
widths = np.array([1, 3, 1])
bounds = np.insert(widths, 0, 0).cumsum() - 0.5
ticks_pos = (bounds[:-1] + bounds[1:]) / 2 # np.convolve(bounds, [.5, .5], 'valid')
我正在使用 matplotlib 创建热图 plt.imshow
。
Y轴代表时间,按原样即可。 X 轴代表特征,是我要修改的特征。
一些特征是标签和列的 1:1 映射,即:
标签 length
仅与一列相关联
另一方面,一些特征是标签和列的 1:n 映射,即:
标签 colors
与三列相关联,每列代表一种颜色。
我想要实现的是让所有 1:n 标签跨越它们关联的列,如下所示:
|-------|-------|-------|-------|-------|
| | | | | |
|-------|-------|-------|-------|-------|
| | | | | |
|-------|-------|-------|-------|-------|
| | | | | |
|-------|-------|-------|-------|-------|
|_______|_______________________|_______|
| | |
Length Colors Size
这可能吗?
提前感谢您的帮助:-)
以下方法使用放大的次要刻度线进行分隔,使用主要刻度线放置刻度线标签。可选地,次刻度位置也可用于绘制网格线作为额外的分隔。
from matplotlib import pyplot as plt
from matplotlib.ticker import FixedLocator
import numpy as np
plt.imshow(np.random.uniform(0, 1, (5, 5)), cmap='inferno')
plt.tick_params(axis='x', which='major', length=0)
plt.tick_params(axis='x', which='minor', length=15)
plt.xticks([0, 2, 4], ['Length', 'Colors', 'Size'])
plt.gca().xaxis.set_minor_locator(FixedLocator([-0.5, 0.5, 3.5, 4.5]))
# plt.grid(axis='x', which='minor', color='white', lw=2)
plt.show()
PS:次要刻度和主要刻度的位置可以从宽度数组计算:
widths = np.array([1, 3, 1])
bounds = np.insert(widths, 0, 0).cumsum() - 0.5
ticks_pos = (bounds[:-1] + bounds[1:]) / 2 # np.convolve(bounds, [.5, .5], 'valid')