Почему бы просто не обрезать нулевые значения в источнике. Я имею в виду, используя pandas
сам.
Так вот мой подход к этому.
У нас есть образец данных.
df = pd.DataFrame({"A": ["foo", "foo", "foo", "foo", "foo",
"bar", "bar", "bar", "bar"],
"B": ["one", "one", "one", "two", "two",
"one", "one", "two", "two"],
"C": ["small", "large", "large", "small",
"small", "large", "small", "small",
"large"],
"D": [1, 2, 2, 0, 0, 4, 5, 6, 7]})
Который на развороте дает мне.
table = pd.pivot_table(df, values='D', index=['A', 'B'],
columns=['C'], aggfunc=np.sum)
Ссылка: здесь
Выход:
C large small
A B
bar one 4.0 5.0
two 7.0 6.0
foo one 4.0 1.0
two NaN 0.0
Так что, если мы удалим foo and two
, мы сможем получить правильный график. Я делаю это с помощью.
table = table.fillna(0) # replace all NaN values to zero
table = table[(table.T != 0).any()] # remove all the rows which are having sum as zero.
Выход:
C large small
A B
bar one 4.0 5.0
two 7.0 6.0
foo one 4.0 1.0
Наконец, мы можем построить запонки с помощью
plot = table.iplot(kind ='barh', barmode = 'stack', asFigure=True)
py_offline.iplot(plot)
Пожалуйста, попробуйте это решение и дайте мне знать, если это решит вашу проблему!