我正在尝试找到一种解决方案来解决图中有多个 xlabel 的情况,我不能放弃任何一个。
问题在于 xlabel 相互运行,导致绘图不可读(如 subplot(1,1)
中所示)
我想知道是否可以以某种方式使每个第二个标签处于另一个高度(如所附示例)
最佳答案
两种方法
向刻度/标签添加正旋转:https://matplotlib.org/3.1.0/api/_as_gen/matplotlib.pyplot.xticks.html
向每个偶数 x 标签添加两个换行符。代码取自https://matplotlib.org/3.1.0/gallery/lines_bars_and_markers/bar_stacked.html#sphx-glr-gallery-lines-bars-and-markers-bar-stacked-py并使用执行此操作的列表理解进行修改(并且还进行了修改,使标签有点大,就像你的一样)
import numpy as np
import matplotlib.pyplot as plt
# call this function in xticks parameters
def transform_xlabels(xlabels):
return ('\n\n%s' % label if i % 2 else label for i, label in enumerate(xlabels))
N = 5
menMeans = (20, 35, 30, 35, 27)
womenMeans = (25, 32, 34, 20, 25)
menStd = (2, 3, 4, 1, 2)
womenStd = (3, 5, 2, 3, 3)
ind = np.arange(N) # the x locations for the groups
width = 0.35 # the width of the bars: can also be len(x) sequence
p1 = plt.bar(ind, menMeans, width, yerr=menStd)
p2 = plt.bar(ind, womenMeans, width,
bottom=menMeans, yerr=womenStd)
plt.ylabel('Scores')
plt.title('Scores by group')
test = 'G1 abc \ndaido misco iso'
xlabels = ('G1 %s' % test, 'G2 %s' % test, 'G3 %s' % test, 'G4 %s' % test, 'G5 %s' % test)
# function is called
plt.xticks(ind, transform_xlabels(xlabels))
plt.yticks(np.arange(0, 81, 10))
plt.legend((p1[0], p2[0]), ('Men', 'Women'))
plt.show()
输出
关于python - matplotlib 2 个级别中多个重叠的 xlabel,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60399815/