文章原创,最近更新:2018-05-8
1.原数据的展示
2.柱形图的绘制
3.散点图的绘制
课程来源: python数据分析与机器学习实战-唐宇迪
为了方便大家学习,将练习所涉及的练习fandango_scores.csv文件以百度网盘共享的方式分享出来.
链接: https://pan.baidu.com/s/1yR7qkY4SjGdCiP-hqOXQRQ 密码: wf5f
1.原数据的展示
fandango_scores.csv原数据在csv的展现:
原数据是22列,每一列都是国外网站对相对应的电影的评分.
查看一下'FILM', 'RT_user_norm', 'Metacritic_user_nom', 'IMDB_norm', 'Fandango_Ratingvalue', 'Fandango_Stars'这6列的第0行显示的数据,如下:
import matplotlib.pyplot as plt
import numpy as np
reviews=pd.read_csv("fandango_scores.csv")
cols = ['FILM','RT_user_norm', 'Metacritic_user_nom', 'IMDB_norm', 'Fandango_Ratingvalue', 'Fandango_Stars']
norm_reviews = reviews[cols]
print(norm_reviews[:1])
输出的结果如下:
FILM RT_user_norm Metacritic_user_nom \
0 Avengers: Age of Ultron (2015) 4.3 3.55
IMDB_norm Fandango_Ratingvalue Fandango_Stars
0 3.9 4.5 5.0
2.柱形图的绘制
2.1plt.bar()函数
想知道一个电影的集中评分,用柱形图画出来,应该怎么画呢?
来思考一下,画一个柱形图需要什么东西呢?
- 如果选5个媒体进行评分,每个媒体的评分值应该是多少呢?因此绘制柱形图之前,应该要把媒体对电影的评分值应该确定下来,即就是柱的高度.
- 此外,需要将柱画在什么样的位置上?第一个柱离原点有多少远?第二个柱离第一个柱有多远?第三个柱离第二个有多远?第四个柱离第三个有多远?需要将每个柱到原点的距离定义出来.
因此要完成上面的要求,需要用到plt.bar()函数以及plt.subplots函数
1)plt.bar 函数签名为:
bar(left, height, width=0.8, bottom=None, **kwargs)
事实上,left,height,width,bottom这四个参数确定了柱体的位置和大小。默认情况下,left为柱体的居中位置(可以通过align参数来改变left值的含义),即:
(left - width / 2, bottom)为左下角位置
(left + width / 2, bottom + height)为右上角位置
2) plt.subplots函数
学习参考链接Matplotlib的子图subplot的使用
【Matplotlib】详解图像各个部分
Figure 和 subplot是一件非常常见的任务,于是出现了更为方便的方法(plt.subplots ),它可以创建一个新的Figure.
并返回一个含有已创建的subplot对象的Numpy数组
fig,axes = plt.subplots(2,3),
这种用法,可以一下子产生2x3个子窗口,并且以numpy数组的方式保存在axes中,而fig仍然是整个图像对象,这样我们可以通过对axes进行索引来访问每个子窗口。
看一下plt.subplots(2,3)显示的结果:
首先要确定评分的列,将该列的数据拿出来.
bar_positions=arange(5)+0.75,通过该段代码确定每个柱子分别离原点的距离.
bar_heights=norm_reviews.loc[0,num_cols].values,通过该段代码确定电影的平均分,即就是当前柱子的高度.
ax.bar(bar_positions,bar_positions,0.3),通过该段代码将柱形图依据参数进行绘制.而这里的0.3指的是柱子的宽度.
完整的代码如下:
import matplotlib.pyplot as plt
from numpy import arange
reviews=pd.read_csv("fandango_scores.csv")
cols = ['FILM','RT_user_norm', 'Metacritic_user_nom', 'IMDB_norm', 'Fandango_Ratingvalue', 'Fandango_Stars']
norm_reviews = reviews[cols]
num_cols = ['FILM','RT_user_norm', 'Metacritic_user_nom', 'IMDB_norm', 'Fandango_Ratingvalue', 'Fandango_Stars']
bar_heights=norm_reviews.loc[0,num_cols].values#当前柱子的高度
bar_positions=arange(5)+0.75#分别每个柱子离原点的距离
fig,ax=plt.subplots()
ax.bar(bar_positions,bar_positions,0.3)
plt.show()
输出的结果如下:
2.2.set_xticks、.set_xticklabels、.set_xlabe、.set_ylabel、.set_title函数
怎么设置柱形图的x,y的名称以及标题
需要用到到.set_xticks、.set_xticklabels、.set_xlabe、.set_ylabel、.set_title这5个函数,这5个函数具体用法如下:
参考链接:Python--matplotlib绘图可视化知识点整理
1).set_xticks函数&.set_xticklabels函数
tick_positions = range(1,6)
ax.set_xticks(tick_positions)
刻度在0,1,2,3,4,5的地方生成
ax.set_xticklabels(num_cols, rotation=45)
再用set_xlabel为x轴设置每一个刻度的一个名称,名称逆时针旋转45度.
set_xticks与set_xticklabels的结合,我们就可以任意变换我们想要的x轴标签的显示形式了,记住,set_xticks是设定标签的实际刻度,而set_xticklabels则是设定标签实际刻度显示的结果。
3).set_xlabe以及.set_ylabel函数
来定义x,y坐标轴标题,具体案例如下:
ax.set_xlabel("x")
ax.set_ylabel("sin(x),cos(x)")
4).set_title函数
设置一个标题
注意:
由subplots或者add_subplot添加的子窗口都是AxesSubplot对象,支持一般plt支持的大部分绘图命令。
suplots还可以通过sharex与sharey来指定subplot应该具有相同的x轴或y轴。调节xlim与ylim会自动缩放
各个图表的界限。
新增的代码如下:
tick_positions = range(1,6)
ax.set_xticks(tick_positions)
ax.set_xticklabels(num_cols, rotation=45)
ax.set_xlabel('Rating Source')
ax.set_ylabel('Average Rating')
ax.set_title('Average User Rating For Avengers: Age of Ultron (2015)')
完整的代码如下:
import matplotlib.pyplot as plt
from numpy import arange
reviews=pd.read_csv("fandango_scores.csv")
cols = ['FILM','RT_user_norm', 'Metacritic_user_nom', 'IMDB_norm', 'Fandango_Ratingvalue', 'Fandango_Stars']
num_cols = ['FILM','RT_user_norm', 'Metacritic_user_nom', 'IMDB_norm', 'Fandango_Ratingvalue', 'Fandango_Stars']
norm_reviews = reviews[cols]
bar_heights=norm_reviews.loc[0,num_cols].values#当前柱子的高度
bar_positions=arange(5)+0.75#分别每个柱子离原点的距离
tick_positions = range(1,6)
fig,ax=plt.subplots()
ax.bar(bar_positions,bar_positions,0.5)
ax.set_xticks(tick_positions)
ax.set_xticklabels(num_cols, rotation=45)
ax.set_xlabel('Rating Source')
ax.set_ylabel('Average Rating')
ax.set_title('Average User Rating For Avengers: Age of Ultron (2015)')
plt.show()
最终输出的结果如下:
2.3旋转柱形图的x,y轴
之前的柱形图是竖着的,如果将柱形图改成横的,又应该怎么操作?
修改的代码如下:
-
更改1
修改前:bar_heights=norm_reviews.loc[0,num_cols].values
修改后:bar_widths=norm_reviews.loc[0,num_cols].values
只是改了变量的名称 -
更改2
修改前:ax.bar(bar_positions,bar_positions,0.5)
修改后:ax.barh(bar_positions,bar_widths,0.5)
ax.bar是柱形图竖的方向,ax.barh是柱形图横向的方向 -
更改3
修改前:
ax.set_xticks(tick_positions)
ax.set_xticklabels(num_cols, rotation=45)
修改后:
ax.set_yticks(tick_positions)
ax.set_yticklabels(num_cols)
x轴的刻度,和刻度的标签转成y轴的刻度和刻度的标签,并且将y轴刻度的标签按默认的方向放置.
- 更改4
修改前:
ax.set_xlabel('Rating Source')
ax.set_ylabel('Average Rating')
修改后:
ax.set_ylabel('Rating Source')
ax.set_xlabel('Average Rating')
x轴与y轴的标签互相调换
完整的代码如下:
import matplotlib.pyplot as plt
from numpy import arange
reviews=pd.read_csv("fandango_scores.csv")
cols = ['FILM','RT_user_norm', 'Metacritic_user_nom', 'IMDB_norm', 'Fandango_Ratingvalue', 'Fandango_Stars']
norm_reviews = reviews[cols]
num_cols = ['RT_user_norm', 'Metacritic_user_nom', 'IMDB_norm', 'Fandango_Ratingvalue', 'Fandango_Stars']
bar_widths=norm_reviews.loc[0,num_cols].values#当前柱子的高度
bar_positions=arange(5)+0.75#分别每个柱子离原点的距离
tick_positions = range(1,6)
fig,ax=plt.subplots()
ax.barh(bar_positions,bar_widths,0.5)
ax.set_yticks(tick_positions)
ax.set_yticklabels(num_cols)
ax.set_ylabel('Rating Source')
ax.set_xlabel('Average Rating')
ax.set_title('Average User Rating For Avengers: Age of Ultron (2015)')
plt.show()
最终显示的结果如下:
3.散点图的绘制
3.1基本散点图的绘制-.scatter函数的用法
首先介绍.scatter的用法
以及散点的形状参数marker如下:
分析:散点图是一个点接着一个点的.散点图的点是由x轴以及y轴交叉构成的.,因此用Fandango_Ratingvalue、RT_user_norm'这两个电影评分交叉成一个点,用.scatter函数画成散点图。
绘制基本的散点图,具体代码如下:
import matplotlib.pyplot as plt
reviews=pd.read_csv("fandango_scores.csv")
fig,ax=plt.subplots()
cols = ['FILM','RT_user_norm', 'Metacritic_user_nom', 'IMDB_norm', 'Fandango_Ratingvalue', 'Fandango_Stars']
norm_reviews = reviews[cols]
ax.scatter(norm_reviews['Fandango_Ratingvalue'], norm_reviews['RT_user_norm'])
ax.set_xlabel('Fandango')
ax.set_ylabel('Rotten Tomatoes')
plt.show()
输出的结果如下:
3.2拆分散点图
散点图子图的绘制
完整的代码如下:
import matplotlib.pyplot as plt
fig=plt.figure(figsize=(5,10))
ax1=fig.add_subplot(2,1,1)
ax2=fig.add_subplot(2,1,2)
reviews=pd.read_csv("fandango_scores.csv")
cols = ['FILM','RT_user_norm', 'Metacritic_user_nom', 'IMDB_norm', 'Fandango_Ratingvalue', 'Fandango_Stars']
norm_reviews = reviews[cols]
ax1.scatter(norm_reviews['Fandango_Ratingvalue'], norm_reviews['RT_user_norm'])
ax1.set_xlabel('Fandango')
ax1.set_ylabel('Rotten Tomatoes')
ax2.scatter(norm_reviews['RT_user_norm'], norm_reviews['Fandango_Ratingvalue'])
ax2.set_xlabel('Rotten Tomatoes')
ax2.set_ylabel('Fandango')
plt.show()
输出的结果如下:
网友评论