簡體   English   中英

如何使用 Seaborn 在同一圖上繪制多個直方圖

[英]How To Plot Multiple Histograms On Same Plot With Seaborn

使用 matplotlib,我可以在一個圖上使用兩個數據集制作直方圖(一個挨着另一個,而不是重疊)。

import matplotlib.pyplot as plt
import random

x = [random.randrange(100) for i in range(100)]
y = [random.randrange(100) for i in range(100)]
plt.hist([x, y])
plt.show()

這產生了以下情節。

在此處輸入圖片說明

但是,當我嘗試使用 seabron 執行此操作時;

import seaborn as sns
sns.distplot([x, y])

我收到以下錯誤:

ValueError: color kwarg must have one color per dataset

那么我嘗試添加一些顏色值:

sns.distplot([x, y], color=['r', 'b'])

我得到了同樣的錯誤。 我看到這篇關於如何疊加圖形的帖子,但我希望這些直方圖並排放置,而不是疊加。

查看文檔,它沒有指定如何將列表列表包含為第一個參數“a”。

如何使用 seaborn 實現這種直方圖風格?

如果我理解正確,您可能想嘗試以下操作:

fig, ax = plt.subplots()
for a in [x, y]:
    sns.distplot(a, bins=range(1, 110, 10), ax=ax, kde=False)
ax.set_xlim([0, 100])

這應該產生這樣的情節:

在此處輸入圖片說明

更新

看起來您想要“seaborn 外觀”而不是 seaborn 繪圖功能。 為此,您只需要:

import seaborn as sns
plt.hist([x, y], color=['r','b'], alpha=0.5)

這將產生:

在此處輸入圖片說明

將 x 和 y 合並到 DataFrame,然后使用帶有 multiple='dodge' 和 Hue 選項的 histplot:

import matplotlib.pyplot as plt
import pandas as pd
import random

x = [random.randrange(100) for i in range(100)]
y = [random.randrange(100) for i in range(100)]
df = pd.concat(axis=0, ignore_index=True, objs=[
    pd.DataFrame.from_dict({'value': x, 'name': 'x'}),
    pd.DataFrame.from_dict({'value': y, 'name': 'y'})
])
fig, ax = plt.subplots()
sns.histplot(data=df, x='value', hue='name', multiple='dodge', bins=range(1, 110, 10), ax=ax)
ax.set_xlim([0, 100])

這是繪圖結果。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM