直方图是自动创建的,而不是条形图

Histogram is automatically created instead of a barchart

我想创建一个采用值 {1,2,3,4} 的离散变量的条形图(不是直方图)。

import pandas as pd
import collections
import matplotlib.pyplot as plt
import numpy as np

train = pd.read_csv('data/train.csv', parse_dates=[0])

fig, axes = plt.subplots(nrows=2)
counts = collections.Counter(train['season'].values)
vals = np.arange(len(counts))
axes[0].bar(counts, vals, color='red')
axes[0].set(title='Season')

plt.show()

但是我得到了一个类似于直方图的图("bins" 而不是 X 轴上的值 - 1、2、3 和 4)。

print train['season'].values
[1 1 1 ..., 4 4 4]

print counts
Counter({4: 2734, 2: 2733, 3: 2733, 1: 2686})

print vals
[0 1 2 3]

怎么样:

import pandas as pd
df = pd.DataFrame({'season' : pd.Series([1., 2., 3., 4., 1., 3.])})
df.season.value_counts(sort=False).plot(kind='bar')

我认为你有几件事需要解决

  1. 我认为你的 vals 和计数方式是错误的
  2. 您不需要为 x 轴上的值创建值,您可以使用 counts.keys()
  3. 要访问计数,您需要使用 counts.values()
  4. 要正确设置 x 刻度,您可以设置它们 counts.keys() 以及
  5. 您还需要将条形图与 居中,而不是左边缘(这是默认行为)

综上所述,请试试这个:

import pandas as pd
import collections
import matplotlib.pyplot as plt
import numpy as np

train = pd.read_csv('data/train.csv', parse_dates=[0])

fig, axes = plt.subplots(nrows=2)
counts = collections.Counter(train['season'].values)
axes[0].bar(counts.keys(), counts.values(), color='red',align='center')
axes[0].set(title='Season')

axes[0].set_xticks(counts.keys())

plt.show()