【问题标题】:Colour horizontal bars on a seaborn plot based on the y-axis with seaborn/matplotlib使用 seaborn/matplotlib 基于 y 轴在 seaborn 图上着色水平条
【发布时间】:2020-12-06 14:06:14
【问题描述】:

所以在任何人说之前,我并不是要创建一个水平条形图。我正在尝试制作一个散点图,根据 y 值对不同的图进行分类。

这是我当前的代码:

import matplotlib.pyplot as plt
import seaborn as sns
import pandas as pd
import datetime
import random

f = []

for i in range(10):
    f.append(random.randint(60,80))

df = pd.DataFrame({
"Weight": f, "Dates": ["01/12/20", "05/11/20", "12/02/20", "18/09/20", "22/04/20", "19/01/20", "18/02/20", "02/01/20", "28/11/20", "26/03/20"]
}, columns=["Weight", "Dates"])

df["Dates"] = pd.to_datetime(df["Dates"])

df.sort_values(by="Dates", inplace=True, ascending=True)

sns.set_theme(style="dark")

dates = [datetime.datetime.date(x) for x in df["Dates"]]

graph = sns.stripplot(data=df, x=dates, y="Weight")
graph.set_xticklabels(graph.get_xticklabels(), rotation=45)

plt.show()

所以这是当前的输出:

但我希望能够添加一些条形图,以便对数据进行分类,例如(抱歉我画得不好):

之后我还想看点,但我不在乎它们是什么颜色。

我不知道这是否可能,但谢谢!

编辑:tmdavidson 在 cmets 中回答。

【问题讨论】:

  • 你如何确定条的高度应该是多少?您可以在轴上添加一些 matplotlib Rectangle 补丁。或使用fill_between。或者在散点图下方添加 zorder,或者给它们一个透明度 (alpha),这样你就可以看到它们后面的散点图。
  • 谢谢,矩形位的建议奏效了。现在只是想对其进行排序

标签: python python-3.x matplotlib seaborn


【解决方案1】:

我会推荐为此目的而制作的axhspan

bands = [77.5,72.5,67.5,60]
colors = plt.cm.get_cmap('tab10')(range(len(limits)))
for y1,y2,c in zip(bands[0:], bands[1:], colors):
    graph.axhspan(ymin=y1, ymax=y2, color=c, zorder=0, alpha=0.5)

【讨论】:

    猜你喜欢
    • 2017-09-30
    • 2019-05-29
    • 1970-01-01
    • 2019-02-18
    • 2019-07-23
    • 2018-03-03
    • 1970-01-01
    • 2016-03-17
    • 2015-01-17
    相关资源
    最近更新 更多