如何将计数添加到直方图?
How can I add the counts to the histogram plot?
我想将直方图的计数数据添加到 matplotlib 中的绘图中。这是我的数据;
import matplotlib.pyplot as plt
data = [['B', 1], ['C', 2], ['A', 3],['A', 4], ['B', 5], ['B', 6],['A', 7], ['B', 8], ['C', 9],['D',10]]
df = pd.DataFrame(data, columns = ['Name', 'Count'])
plt.hist(df['Name'])
plt.show()
结果是这样的;
result1
我尝试使用 plt.text
和 value_counts()
但它们的排序不同...
import matplotlib.pyplot as plt
data = [['B', 1], ['C', 2], ['A', 3],['A', 4], ['B', 5], ['B', 6],['A', 7], ['B', 8], ['C', 9],['D',10]]
df = pd.DataFrame(data, columns = ['Name', 'Count'])
xvals = np.arange(len(df['Name'].value_counts()))
yvals = list(df['Name'].value_counts())
for i in range(len(df['Name'].value_counts())):
plt.text(x=xvals[i], y=yvals[i],s=df['Name'].value_counts(sort=False)[i])
plt.hist(df['Name'])
plt.show()
所以,我得到了这样的结果;
result2
我觉得应该没那么难,但是我找不到任何解决办法。
您可以尝试这样的操作:
hist
returns 计数、分箱和补丁。
patches
是一个矩形列表。然后你可以使用补丁矩形的计数和坐标来注释轴。
import numpy as np
import matplotlib.pyplot as plt
# generate some random data
x = np.random.randn(10000)
x = x * 100
x = x.astype(np.int)
# plot the histogram of the data
bins = np.arange(-300,300,20)
fig = plt.figure(figsize=(15,4))
ax = plt.gca()
counts, _, patches = ax.hist(x, bins=bins,edgecolor='r')
for count, patch in zip(counts,patches):
ax.annotate(str(int(count)), xy=(patch.get_x(), patch.get_height()))
plt.show()
pyplot.hist
returns 垃圾箱的长度和位置。您可以通过从 pyplot.hist
:
保存 returns 来使用它
import matplotlib.pyplot as plt
import pandas as pd
import numpy as np
data = [['B', 1], ['C', 2], ['A', 3],['A', 4], ['B', 5], ['B', 6],['A', 7], ['B', 8], ['C', 9],['D',10]]
df = pd.DataFrame(data, columns = ['Name', 'Count'])
xvals = np.arange(len(df['Name'].value_counts()))
yvals = list(df['Name'].value_counts())
counts, bins, _ = plt.hist(df['Name'])
for n, b in zip(counts, bins):
plt.gca().text(b + 0.1, n, str(n)) # +0.1 to center text
plt.show()
这导致:
如果要删除空柱的 0.0,请将 for
循环更改为:
for n, b in zip(counts, bins):
if n > 0:
plt.gca().text(b + 0.1, n, str(n)) # +0.1 to center text
结果:
我想将直方图的计数数据添加到 matplotlib 中的绘图中。这是我的数据;
import matplotlib.pyplot as plt
data = [['B', 1], ['C', 2], ['A', 3],['A', 4], ['B', 5], ['B', 6],['A', 7], ['B', 8], ['C', 9],['D',10]]
df = pd.DataFrame(data, columns = ['Name', 'Count'])
plt.hist(df['Name'])
plt.show()
结果是这样的; result1
我尝试使用 plt.text
和 value_counts()
但它们的排序不同...
import matplotlib.pyplot as plt
data = [['B', 1], ['C', 2], ['A', 3],['A', 4], ['B', 5], ['B', 6],['A', 7], ['B', 8], ['C', 9],['D',10]]
df = pd.DataFrame(data, columns = ['Name', 'Count'])
xvals = np.arange(len(df['Name'].value_counts()))
yvals = list(df['Name'].value_counts())
for i in range(len(df['Name'].value_counts())):
plt.text(x=xvals[i], y=yvals[i],s=df['Name'].value_counts(sort=False)[i])
plt.hist(df['Name'])
plt.show()
所以,我得到了这样的结果; result2
我觉得应该没那么难,但是我找不到任何解决办法。
您可以尝试这样的操作:
hist
returns 计数、分箱和补丁。
patches
是一个矩形列表。然后你可以使用补丁矩形的计数和坐标来注释轴。
import numpy as np
import matplotlib.pyplot as plt
# generate some random data
x = np.random.randn(10000)
x = x * 100
x = x.astype(np.int)
# plot the histogram of the data
bins = np.arange(-300,300,20)
fig = plt.figure(figsize=(15,4))
ax = plt.gca()
counts, _, patches = ax.hist(x, bins=bins,edgecolor='r')
for count, patch in zip(counts,patches):
ax.annotate(str(int(count)), xy=(patch.get_x(), patch.get_height()))
plt.show()
pyplot.hist
returns 垃圾箱的长度和位置。您可以通过从 pyplot.hist
:
import matplotlib.pyplot as plt
import pandas as pd
import numpy as np
data = [['B', 1], ['C', 2], ['A', 3],['A', 4], ['B', 5], ['B', 6],['A', 7], ['B', 8], ['C', 9],['D',10]]
df = pd.DataFrame(data, columns = ['Name', 'Count'])
xvals = np.arange(len(df['Name'].value_counts()))
yvals = list(df['Name'].value_counts())
counts, bins, _ = plt.hist(df['Name'])
for n, b in zip(counts, bins):
plt.gca().text(b + 0.1, n, str(n)) # +0.1 to center text
plt.show()
这导致:
如果要删除空柱的 0.0,请将 for
循环更改为:
for n, b in zip(counts, bins):
if n > 0:
plt.gca().text(b + 0.1, n, str(n)) # +0.1 to center text
结果: