簡體   English   中英

為什么 matplotlib 直方圖中的列不在數字之上

[英]Why are the columns in the matplotlib histogram not on top of the numbers

我希望每一列都以其 bin 編號為中心。 相反,第 1 和第 2 條在數字的右側,第 3 個在左側。 為什么它甚至不一致?

直方圖

import matplotlib.pyplot as plt

degrees = [1, 1, 2, 2, 2, 2, 3]
plt.hist(degrees)
plt.show()

簡短回答不應該,而是使用plt.bar() 如需更長的解釋,請閱讀下文。

為什么條形圖不在數字 1、2 和 3 之上?

直方圖的目的是近似數據的分布 例如

import numpy as np
plt.hist(np.random.normal(3, 7, 100))

這使

在此處輸入圖像描述

現在,當你的數據少得多時,它的價值是 integer,然后調用

plt.hist([1, 1, 2, 2, 2, 2, 3])

您還可以獲得所提供數據分布的近似值。 使用默認參數,它看起來像這樣:

在此處輸入圖像描述

hist 的文檔告訴我們

  • 如果您不提供bins ,它將默認為 10。
  • 如果您不提供range ,它將默認為您的數據的最小值和最大值

因此,您的數據將被放入 10 個 bin 中,最小值為1 ,最大值為3 這些垃圾桶將

In [45]: np.linspace(1,3, 11)
Out[45]: array([1. , 1.2, 1.4, 1.6, 1.8, 2. , 2.2, 2.4, 2.6, 2.8, 3. ])

由於您只有 bin 1.0 - 1.22.0 - 2.2 2.8 - 3.0的數據,您將看到三個條以1.12.9 2.1中心。

猜猜你在找什么

如果您的數據是 integer(分類)值,例如

degrees = [1, 1, 2, 2, 2, 2, 3]

並且您想知道這些類別的相對大小,您可能想創建一個條形圖 plot

在此處輸入圖像描述

import matplotlib.pyplot as plt
from collections import Counter

degrees = [1, 1, 2, 2, 2, 2, 3]
counts = Counter(degrees)

plt.bar(counts.keys(), counts.values())
plt.show()

因為你沒有指定垃圾箱。 如果您將垃圾箱添加到:

degrees = [1, 1, 2, 2, 2, 2, 3]
plt.hist(degrees, bins=[1,2,3,4])
plt.show()

在此處輸入圖像描述

暫無
暫無

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

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