我正在使用Python 3.x使用matplotlib生成箱形图。
常规:我有一个数据框,我想在框图中创建其内容。问题是,跨栏的比例没有一致;需要将l1和l2绘制在与l3:l5不同的Y轴上。第一个包含17列,其他两个包含1列。
l1 = [32107.0,20490.0, 32107.0, 22134.0,31564.0, 32107.0, 22134.0, 20732.0, 20490.0, 28406.0]
l2 = [54.4, 40.2, 54.4, 41.1, 49.4, 54.4, 41.1, 37.0, 40.2, 34.2]
l3 = [4595.0, 2164.0, 4595.0, 3500.0, 3733.0, 4595.0, 3500.0, 3214.0, 2164.0, 3388.0]
l4 = [4868.0, 2289.0, 4868.0, 3652.0, 4128.0, 4868.0, 3652.0, 3418.0, 2289.0, 3980.0]
l5 = [3777.0, 1623.0, 3777.0, 2456.0, 3010.0, 3777.0, 2456.0, 2318.0, 1623.0, 2677.0]
df2 = pd.DataFrame(
{'l1' : l1,
'l2' : l2,
'l3': l3,
'l4' : l4,
'l5' : l5})
fig, ax = plt.subplots(figsize=(5, 3))
ax.boxplot(df2[['l1']].transpose())
ax2 = ax.twinx()
ax2.boxplot(df2['l2'], positions = [2])
ax3 = ax.twinx()
ax3.boxplot(df2['l3'], positions = [3])
ax.set_xlim(0, 7)
这不是很漂亮,但也不是我的全部数据,但结果是一致的;前两列的标签消失了,仅剩下最后一列。
我已经尝试过set_xticks()和其他一些电话,但我却无处可去。
我确实知道如何偏移y轴等等。我基本上对标签事情挂了。
答案 0 :(得分:0)
尝试使用此方法设置您的xaxis刻度:
l1 = [32107.0,20490.0, 32107.0, 22134.0,31564.0, 32107.0, 22134.0, 20732.0, 20490.0, 28406.0]
l2 = [54.4, 40.2, 54.4, 41.1, 49.4, 54.4, 41.1, 37.0, 40.2, 34.2]
l3 = [4595.0, 2164.0, 4595.0, 3500.0, 3733.0, 4595.0, 3500.0, 3214.0, 2164.0, 3388.0]
l4 = [4868.0, 2289.0, 4868.0, 3652.0, 4128.0, 4868.0, 3652.0, 3418.0, 2289.0, 3980.0]
l5 = [3777.0, 1623.0, 3777.0, 2456.0, 3010.0, 3777.0, 2456.0, 2318.0, 1623.0, 2677.0]
df2 = pd.DataFrame(
{'l1' : l1,
'l2' : l2,
'l3': l3,
'l4' : l4,
'l5' : l5})
fig, ax = plt.subplots(figsize=(5, 3))
ax.boxplot(df2[['l1']].transpose())
ax2 = ax.twinx()
ax2.boxplot(df2['l2'], positions = [2])
ax3 = ax.twinx()
# ax3.boxplot(df2[['l3','l4','l5']], positions = [3,4,5])
df2[['l3','l4','l5']].plot.box(positions=[3,4,5], ax=ax3)
ax.set_xlim(0, 7)
_ = ax3.xaxis.set_ticks([1,2,3,4,5])
_ = ax3.xaxis.set_ticklabels(['l1','l2','l3','l4','l5'])
输出: