使用 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
数据框:
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