2017-02-21 14 views
2

У меня есть dataframe вроде этого:Как делиться осями после добавления подзаголовков через add_subplot?

df = pd.DataFrame({'A': [0.3, 0.2, 0.5, 0.2], 'B': [0.1, 0.0, 0.3, 0.1], 'C': [0.2, 0.5, 0.0, 0.7], 'D': [0.6, 0.3, 0.4, 0.6]}, index=list('abcd'))  

    A B C D 
a 0.3 0.1 0.2 0.6 
b 0.2 0.0 0.5 0.3 
c 0.5 0.3 0.0 0.4 
d 0.2 0.1 0.7 0.6 

Теперь я хочу, чтобы построить каждую строку как barplot причем ось у и х-тик-метки, разделяемые с использованием add_subplot.

До сих пор я могу производить только сюжет, который выглядит следующим образом: enter image description here

Существует одна проблема:

Оси не являются общими, как один сделать это после использования add_subplot? Here, эта проблема решается путем создания одного огромного подзаголовка; есть ли способ сделать это по-другому?

Мой желаемый результат выглядит как сюжет выше с той лишь разницей, что в верхней строке нет ярлыков x-tick, а теперь в ярлыке y-tick в правом столбце.

Моя текущая попытка следующее:

import pandas as pd 
import matplotlib.pyplot as plt 
import numpy as np 

df = pd.DataFrame({'A': [0.3, 0.2, 0.5, 0.2], 'B': [0.1, 0.0, 0.3, 0.1], 'C': [0.2, 0.5, 0.0, 0.7], 'D': [0.6, 0.3, 0.4, 0.6]}, index=list('abcd')) 

fig = plt.figure() 
bar_width = 0.35 
counter = 1 
index = np.arange(df.shape[0]) 

for indi, rowi in df.iterrows(): 

    ax = fig.add_subplot(2, 2, counter) 
    ax.bar(index, rowi.values, width=bar_width, tick_label=df.columns) 
    ax.set_ylim([0., 1.]) 
    ax.set_title(indi, fontsize=20) 
    ax.set_xticks(index + bar_width/2) 
    counter += 1 

plt.xticks(index + bar_width/2, df.columns) 
+1

ли вы имеете в виду * общий * как в 'add_subplot (..., sharex =, sharey =) '? – kazemakase

+1

@kazemakase: Если эти флаги 'sharex =', 'sharey =', существовали в 'add_subplot', это действительно было бы идеально. Но таких флагов я не вижу. – Cleb

+1

Вы пробовали? Или вы просто говорите, что их нет, потому что вы слишком ленивы? – ImportanceOfBeingErnest

ответ

1

вопрос, как производить общие подзаговоры в Matplotlib:

Что может быть больше Здесь интересно, что вы могли бы также непосредственно использовать панд, чтобы создать сюжет в одной строке:

import pandas as pd 
import matplotlib.pyplot as plt 

df = pd.DataFrame({'A': [0.3, 0.2, 0.5, 0.2], 'B': [0.1, 0.0, 0.3, 0.1], 'C': [0.2, 0.5, 0.0, 0.7], 'D': [0.6, 0.3, 0.4, 0.6]}, index=list('abcd')) 
df.plot(kind="bar", subplots=True, layout=(2,2), sharey=True, sharex=True) 
plt.show() 

enter image description here