我正在嘗試做一些我不認爲會很難的事情,但我無法弄清楚如何讓python/matplotlib/pylab做。如何繪製每個元素在列表中的次數
給定一個輸入,我想要一個直方圖來顯示每個元素出現的次數。
給定一個列表
x=range(10)
想我具有單個條輸出,10 y值,等於x = 1時,沒有任何其他的曲線圖。
給定一個列表
x=range(10)
x.append(1)
我想輸出有兩個杆,9對於x = 1的Y值,1對於x = 2的y值。我怎樣才能做到這一點?
我正在嘗試做一些我不認爲會很難的事情,但我無法弄清楚如何讓python/matplotlib/pylab做。如何繪製每個元素在列表中的次數
給定一個輸入,我想要一個直方圖來顯示每個元素出現的次數。
給定一個列表
x=range(10)
想我具有單個條輸出,10 y值,等於x = 1時,沒有任何其他的曲線圖。
給定一個列表
x=range(10)
x.append(1)
我想輸出有兩個杆,9對於x = 1的Y值,1對於x = 2的y值。我怎樣才能做到這一點?
如果你收集你的數據轉換成列表的列表,那麼你可能會做這樣的事情:
import numpy as np
import matplotlib.pyplot as plt
x = [range(10)]
x.append([1])
count = map(len, x)
plt.bar(range(len(count)), count)
plt.show()
注意,第一條具有高度10,而不是9。我不不知道這是你的願望還是我誤解了你的意圖。
是這樣的嗎?此代碼使用Counter來計算對象在數組中出現的實例的數量(在這種情況下,計算列表中的整數的次數)。
import matplotlib.pyplot as plt
from collections import Counter
# Create your list
x = range(10)
x.append(1)
# Use a Counter to count the number of instances in x
c = Counter(x)
plt.bar(c.keys(), c.values())
plt.show()
這看起來非常有希望,計數器似乎是一個2.7的功能,我使用2.6(詛咒你的紅帽6.3!),但我會探索這一點。 –
此代碼給你喜歡你喜歡的人的柱狀圖:
import matplotlib.pyplot as plt
import numpy as np
y = np.array([0,1,2,3,4,5,6,7,8,9,1])
plt.hist(y);
plt.show()
對於'plt.hist()'+1。這可能是最直接的方法。 – Dan
當然,你必須通過計算元素開始:
>>> from collections import Counter
>>> counts = Counter(my_iterator)
然後,我們希望來計算這些計數:
>>> count_von_count = Counter(counts)
然後你得到你的酒吧的大小。它做成列表,並繪製它:
>>> bars = [count_von_count[i] for i in range(max(count_von_count) + 1)]
實例爲您的擴展列表:
>>> from collections import Counter
>>> counts = Counter([0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 1])
>>> counts
Counter({1: 2, 0: 1, 2: 1, 3: 1, 4: 1, 5: 1, 6: 1, 7: 1, 8: 1, 9: 1})
>>> count_von_count = Counter(counts.values())
>>> count_von_count
Counter({1: 9, 2: 1})
>>> bars = [count_von_count[i] for i in range(max(count_von_count) + 1)]
>>> bars
[0, 9, 1]
你不是故意的'範圍(10)'身高1的10條和第9條擴展列表中的高度2(在x = 2)上的高度1和1? – Noctua
你有沒有任何示例代碼來顯示你迄今爲止做了什麼? – Ffisegydd
我明白你的意思,你真的想要一個計數... – Noctua