使用 Pandas 中的图的直方图 - 设置 x 标签

Histogram using plot in Pandas - set x label

数据框:


Horror films released in 2019
Title           Director            Country             Year
3 from Hell     Rob Zombie          United States   2019
Bliss           Joe Begos           United States   2019
Bedeviled       The Vang Brothers   United States   2016
Creep 2         Patrick Brice       United States   2017
Brightburn      David Yarovesky     United States   2019
Delirium        Dennis Iliadis      Ireland         2018
Child's Play    Lars Klevberg       United States   2019
The Conjuring 2 James Wan           United States   2016
Bloodlands      Steven Kastrissios  Albania         2017
Bird Box        Susanne Bier        United States   2017

需要使用 Pandas 绘图函数

绘制一个直方图,显示多年来发行的游戏数量

代码:

df=pd.read_csv(filename)
group = df.groupby('Year').count()[['Title']]
new_df = grouped.reset_index()
xtick=newdf['Year'].tolist()
width = newdf.Year[1] - newdf.Year[0]
newdf.iloc[:,1:2].plot(kind='bar', width=width)

无法想出用年份列中的值标记 x 轴的方法,也不确定我的方法是否正确。

提前致谢:)

api 提供了几种不同的方法来做到这一点(我觉得这不是什么好事)。这是获得所需内容的一种方法:

df = pd.read_csv(filename)
group = df.groupby('Year').count()[['Title']]
df2 = group.reset_index()
df2.plot(kind='bar', x="Year", y="Title")

或者,更简洁:

df.value_counts("Year").plot(kind="bar")

请注意,在第二种情况下,您是从 Series 对象创建条形图。

你可以简单地做

df.groupby('Year').Title.count().plot(kind='bar')

输出

听起来您想要条形图,而不是直方图,因为您有 discrete/categorical 个变量(年)。你在情节陈述中说“kind=bar”,所以你走在正确的轨道上。试试这个看看它是否适合你。我强制 y 轴为整数,因为您正在寻找计数,但这是可选的。

import pandas as pd
import matplotlib.pyplot as plt

title = [ 'Movie1','Movie2','Movie3',
        'Movie4','Movie5','Movie6',
        'Movie7','Movie8','Movie9',
]

year = [2019,2019,2018,
        2017,2019,2018,
        2019,2017,2018
]

df = pd.DataFrame(list(zip(title, year)), 
                  columns =['Title', 'Year']
                 )

print(df)
group = df.groupby('Year').count()[['Title']]\
        .rename(columns={'Title': 'No. of Movies'})\
        .reset_index()
print(group)

ax = group.plot.bar(x='Year', rot=0)
ax.yaxis.get_major_locator().set_params(integer=True)
plt.show()

    Title  Year
0  Movie1  2019
1  Movie2  2019
2  Movie3  2018
3  Movie4  2017
4  Movie5  2019
5  Movie6  2018
6  Movie7  2019
7  Movie8  2017
8  Movie9  2018

   Year  No. of Movies
0  2017              2
1  2018              3
2  2019              4