Matplotlib:子图中的不同x轴标签

时间:2018-07-28 12:45:59

标签: python matplotlib

在for循环内生成子图时,如何在子图中获得不同的x轴标签;

attributes = ["attr_with_2_categories", "attr_with_5_categories"]
target = 'Target'
for idx, variable in enumerate(attributes):

    plt.subplot(2, 1, idx+1)
    df_rate = DataSet[[target,variable]].groupby([variable]).mean()
    counts = DataSet[variable].value_counts()
    output = pd.concat((df_rate, counts), axis=1, sort=False)
    output.columns = ["DR", "Counts"]
    labels = np.unique(DataSet[variable])

    ax1 = output["Counts"].plot(kind='bar', width=0.5, color='skyblue', use_index=True)
    plt.ylabel("Count")
    ax1.set_xticklabels(labels, rotation = 45)
    ax2 = plt.twinx(ax1)
    ax2.plot(ax1.get_xticks(),output["DR"], linestyle='-', marker='o', linewidth=3.0)
    plt.ylabel("DR")
    plt.grid(False)
    plt.tight_layout()

plt.show()

这里的结果是两个图,但是两个图都以最后一个图的标签结尾,而最后一个图具有5个标签,而第一个图只有2个。

1 个答案:

答案 0 :(得分:2)

您需要将标签设置为轴对象。您可能还需要调整间距。下面是一个示例:

import matplotlib.pyplot as plt
import numpy as np
numrows = 3
numcols = 3
fig, ax = plt.subplots(ncols=numcols,nrows=numrows)
counter = 0
angles = np.linspace(0, 2*np.pi,100)
for i in range(numrows):
    for j in range(numcols):
        ax[i][j].plot(np.sin((i+1)*angles), np.cos((j+1)*angles))
        ax[i][j].set_xlabel('(%s,%s)'%(i+1,j+1))
        ax[i][j].set_aspect('equal')
plt.subplots_adjust(hspace=1.0)
plt.show()

subplots example with different x_axis labels