【问题标题】:Histogram is automatically created instead of a barchart自动创建直方图而不是条形图
【发布时间】:2015-12-07 18:33:51
【问题描述】:

我想创建一个离散变量的条形图(不是直方图),该变量取值 {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()

但是,我得到一个类似于直方图的图(“箱”而不是 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]

【问题讨论】:

  • 你能发一个train['season'].values的样本吗?
  • @tom:请看我的更新。

标签: python numpy pandas matplotlib bar-chart


【解决方案1】:

我认为你有几件事要解决

  1. 我认为您的 vals 和计数方式错误
  2. 您不需要为 x 轴上的值创建 val,您可以使用 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()

【讨论】:

    【解决方案2】:

    怎么样:

    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')
    

    【讨论】:

      猜你喜欢
      • 2014-12-04
      • 1970-01-01
      • 2010-12-28
      • 2020-01-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-06-17
      相关资源
      最近更新 更多