直方图是自动创建的,而不是条形图
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')
我认为你有几件事需要解决
- 我认为你的 vals 和计数方式是错误的
- 您不需要为 x 轴上的值创建值,您可以使用
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()
我想创建一个采用值 {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')
我认为你有几件事需要解决
- 我认为你的 vals 和计数方式是错误的
- 您不需要为 x 轴上的值创建值,您可以使用
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()