Matplotlib несколько осей Y, xlabels исчезают? - PullRequest
0 голосов
/ 11 декабря 2018

Я работаю с Python 3.x для генерации коробочных графиков с использованием matplotlib

Общие сведения: у меня есть фрейм данных, содержимое которого я хотел бы создать в виде графика.Проблема в том, что шкалы по столбцам не согласованы;l1 и l2 должны быть нанесены на отдельные оси Y от l3: l5.Первый содержит 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 и все такое;Я в основном зациклен на маркировке.

1 Ответ

0 голосов
/ 11 декабря 2018

Попробуйте установить галочки 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'])

Вывод:

enter image description here

...