(十一)Matplotlib知识学习3-python数据分析与机器学习实战(学习笔记)

文章原创,最近更新:2018-05-8

1.原数据的展示
2.柱形图的绘制
3.散点图的绘制
课程来源: python数据分析与机器学习实战-唐宇迪

为了方便大家学习,将练习所涉及的练习fandango_scores.csv文件以百度网盘共享的方式分享出来.
链接: https://pan.baidu.com/s/1yR7qkY4SjGdCiP-hqOXQRQ 密码: wf5f

1.原数据的展示

fandango_scores.csv原数据在csv的展现:


(十一)Matplotlib知识学习3-python数据分析与机器学习实战(学习笔记)_第1张图片

原数据是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)显示的结果:


(十一)Matplotlib知识学习3-python数据分析与机器学习实战(学习笔记)_第2张图片
(十一)Matplotlib知识学习3-python数据分析与机器学习实战(学习笔记)_第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()

输出的结果如下:


(十一)Matplotlib知识学习3-python数据分析与机器学习实战(学习笔记)_第4张图片

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度.


(十一)Matplotlib知识学习3-python数据分析与机器学习实战(学习笔记)_第5张图片

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

最终输出的结果如下:


(十一)Matplotlib知识学习3-python数据分析与机器学习实战(学习笔记)_第6张图片

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

最终显示的结果如下:


(十一)Matplotlib知识学习3-python数据分析与机器学习实战(学习笔记)_第7张图片

3.散点图的绘制

3.1基本散点图的绘制-.scatter函数的用法

首先介绍.scatter的用法


(十一)Matplotlib知识学习3-python数据分析与机器学习实战(学习笔记)_第8张图片

以及散点的形状参数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()

输出的结果如下:


(十一)Matplotlib知识学习3-python数据分析与机器学习实战(学习笔记)_第9张图片

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

输出的结果如下:


(十一)Matplotlib知识学习3-python数据分析与机器学习实战(学习笔记)_第10张图片

你可能感兴趣的:((十一)Matplotlib知识学习3-python数据分析与机器学习实战(学习笔记))