Python pyplot-在条形图标签之间绘制弧形图

时间:2020-07-28 16:01:36

标签: python matplotlib plot

我想在条形图和弧形图之间进行混合以显示平均响应时间,并在不同评估上(在用户评估期间收集)STD误差水平和成对显着性参数值。

Here是通过“ outCol”参数的值(没有成对意义信息)汇总的我的主题表演的一个示例。

我已经看到了许多示例,其中通过绘制图的条之间的线段来显示成对的重要性信息,这些线是根据明显不同的集合计算得出的。但是,由于我的参数可以有很多值,出于可读性考虑,我希望像在hand-made example中那样在条形图标签之间将这些段绘制为圆弧。

是否可以使用matplotlib pyplot API进行此操作?如果是这样,怎么办? (我自己没有找到,但是我离成为一名绘图专家还很遥远)

如果没有,是否还有其他API可以启用此类图纸?

谢谢

1 个答案:

答案 0 :(得分:2)

使用clip_on=False,可以在“轴”区域之外绘制圆弧。要放置圆弧,请使用blended transform,其中x坐标为“数据”格式(0、1、2 ...),y坐标为“轴”格式(带有y=1在顶部花键处,y=0在底部书脊处)。圆弧的“高度”可以使其宽度略成比例,例如通过设置height = 0.1*np.sqrt(width)

这是一些示例代码。 plt.tight_layout()使圆弧适合图形:

from matplotlib import pyplot as plt
from matplotlib.patches import Arc
from matplotlib import transforms
import pandas as pd
import numpy as np
import seaborn as sns

labels = list('abcdef')
df = pd.DataFrame({lab: np.random.uniform(0, 100, 5) for lab in labels})

ax = sns.barplot(data=df)

arcs = [('a', 'c'), ('b', 'e'), ('b', 'd'), ('a', 'f')]

trans = transforms.blended_transform_factory(ax.transData, ax.transAxes)
for arc_i, arc_j in arcs:
    i = labels.index(arc_i)
    j = labels.index(arc_j)
    patch = Arc(((i + j)/2, -0.1), j - i, 0.1*np.sqrt(abs(j - i)), theta1=180.0, theta2=360.0, transform=trans,
                clip_on=False, edgecolor='black', linewidth='1')
    ax.add_patch(patch)
plt.tight_layout()
plt.show()

resulting plot