pandas график с накоплением столбцов - изменение цвета краев столбца с накоплением - PullRequest
2 голосов
/ 14 июля 2020

Могу ли я получить настройки краев для применения ко всем составным столбцам как к одному?

вот пример:

df = pd.DataFrame([[2,5,7,11], [4,8,11,45]]).T
ax = df.plot.bar(stacked=True)
ax.containers[0][2].set_edgecolor('green')
ax.containers[0][2].set_linewidth(5)
ax.containers[1][2].set_edgecolor('green')
ax.containers[1][2].set_linewidth(5)

это дает: введите описание изображения здесь

я хочу, чтобы зеленый край был вокруг всей полосы без разрыва между сложенными прямоугольниками, есть идеи?

Ответы [ 2 ]

2 голосов
/ 14 июля 2020

Вы можете нарисовать его в два этапа: сначала составленные столбцы, а затем суммированные столбцы.

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

df = pd.DataFrame([[2, 5, 7, 11], [4, 8, 11, 45]]).T
ax = df.plot.bar(stacked=True)
ax = df.sum(axis=1).plot.bar(facecolor='none', edgecolor='green', lw=5, ax=ax)

example plot

To only draw a rectangle around some bars, set the sum to NaN except for the bars to be highlighted:

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

df = pd.DataFrame([[2, 5, 7, 11], [4, 8, 11, 45]]).T
dfs = df.sum(axis=1)
dfs.iloc[df.index != 2] = np.nan

ax = df.plot.bar(stacked=True)
ax = dfs.plot.bar(facecolor='none', edgecolor='green', lw=5, ax=ax)

только прямоугольник вокруг бара 2

2 голосов
/ 14 июля 2020

Я не уверен, что вы можете указать, чтобы не рисовать одно из краев для каждого прямоугольника. Итак, одна идея - построить Rectangle независимо и получить доступ к позициям, высоте и ширине из ax.containers.

from matplotlib.patches import Rectangle
df = pd.DataFrame([[2,5,7,11], [4,8,11,45]]).T
ax = df.plot.bar(stacked=True)
ax.add_patch(Rectangle(xy=ax.containers[0][2].get_xy(), 
                       width=ax.containers[0][2].get_width(),
                       height=ax.containers[0][2].get_height() 
                              +ax.containers[1][2].get_height(), 
                       fc='none', ec='green', linewidth=5)
            )

введите описание изображения здесь

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...