答案 0 :(得分:3)
似乎无法直接在条形图中添加圆角。但是matplotlib确实提供了FancyBboxPatch
类的here类演示。
因此,为了创建一个如问题所示的图表,我们首先可以制作一个简单的水平条形图:
import pandas as pd
import numpy as np
# make up some example data
np.random.seed(0)
df = pd.DataFrame(np.random.uniform(0,20, size=(4,4)))
df = df.div(df.sum(1), axis=0)
# plot a stacked horizontal bar chart
ax = df.plot.barh(stacked=True, width=0.98, legend=False)
ax.figure.set_size_inches(6,6)
这将产生以下情节:
为了使矩形具有圆角,我们可以遍历ax.patches
中的每个矩形补丁并将其替换为FancyBboxPatch
。这个新的带有圆角的精美补丁会复制旧补丁的位置和颜色,因此我们不必担心放置。
from matplotlib.patches import FancyBboxPatch
ax = df.plot.barh(stacked=True, width=1, legend=False)
ax.figure.set_size_inches(6,6)
new_patches = []
for patch in reversed(ax.patches):
bb = patch.get_bbox()
color=patch.get_facecolor()
p_bbox = FancyBboxPatch((bb.xmin, bb.ymin),
abs(bb.width), abs(bb.height),
boxstyle="round,pad=-0.0040,rounding_size=0.015",
ec="none", fc=color,
mutation_aspect=4
)
patch.remove()
new_patches.append(p_bbox)
for patch in new_patches:
ax.add_patch(patch)
这就是我们得到的:
我给盒子加上了负填充物,以使条形之间留有空隙。这些数字有点黑魔法。不知道rounding_size
和pad
的单位是什么。 mutation_aspect
在上一个演示示例中显示,此处将其设置为4,因为y
的范围约为4,而x
的范围约为1。