Python - Объединение двух гистограмм в одном окне - PullRequest
1 голос
/ 28 января 2020

Мне нужно добавить следующую информацию

score_to_plot = pd.DataFrame({"a":["c1", "c2", "c3", "c4"], 
                              "max_score":[69,77,87,99],
                              "min_score":[55, 72, 83, 94]})

в качестве «графика коробки», чтобы левая сторона поля начиналась с min_score, а правая сторона поля заканчивалась с max_score , на сюжет ниже. Наличие диапазона оценок в качестве дополнительной оси в верхней части.

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

f, ax = plt.subplots()
sns.set_color_codes("pastel")
sns.barplot(x="time", y="a", data={"a":["c1", "c2", "c3", "c4"], "time":[50,70,85,150]},
            label="time_total", color="b")


sns.set_color_codes("muted")
sns.barplot(x="time", y="a", data={"a":["c1", "c2", "c3", "c4"], "time":[20,40,65,135]},
            label="time_productive", color="b")


ax.legend(ncol=2, loc="lower right", frameon=True)
ax.set(ylabel="",
       xlabel="Productive time vs total time vs score")
sns.despine(left=True, bottom=True)

Как бы я это сделал? Спасибо за помощь!

enter image description here

Примерное представление о том, что я хочу получить в результате

enter image description here

1 Ответ

1 голос
/ 28 января 2020

Я сохранил score_to_plot как df. Со следующим дополнением:

df["widths"] = df["max_score"]-df["min_score"]
ax2 = ax.twiny()
ax2.barh(df.a, df.widths, left=df.min_score, color="grey")
plt.xlim([0,100])
ax.legend(loc='lower left')

Я получаю это. Это помогает? enter image description here

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