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

Python 直方图是自动创建的,而不是条形图,python,numpy,pandas,matplotlib,bar-chart,Python,Numpy,Pandas,Matplotlib,Bar Chart,我想创建一个离散变量的条形图(不是直方图),该变量的值为{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(tr

我想创建一个离散变量的条形图(不是直方图),该变量的值为{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()
然而,我得到了一个类似于直方图的图(“bin”而不是X轴上的值-1、2、3和4)。

那么:

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

我想你有几件事要解决

  • 我想你的VAL和计数方法不对
  • 不需要为x轴上的值创建VAL,可以使用
    counts.keys()
  • 要访问计数,您需要使用
    counts.values()
  • 要正确设置x记号,可以设置它们 到
    counts.keys()
  • 您还需要将钢筋与钢筋对齐 居中,而不是左边缘(这是默认行为)
  • 总而言之,请尝试以下方法:

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

    你能发布一个<代码>火车['season']的样本吗?数值?@tom:请查看我的更新。
    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()