数据分析三剑客之matplotlib——2(基于jupyter)

我们今天继续来学习matplotlib,用matplotlib绘图是十分常见的情况,接下来我们用matplotlib绘制更加高级的图

首先,是我们的日常导入

import matplotlib.pyplot as plt
import pandas as pd    #用于读取文件
import numpy as np

如果你不想看到过多的警告,可以使用下面的这一条指令

import warnings
warnings.filterwarnings('ignore')

 修改字体类型,让负号正常显示

plt.rcParams['font.sans-serif']=['SimHei']
plt.rcParams['axes.unicode_minus']=False

读取数据

data = pd.read_excel("movie_data3.xlsx", col_index = 0)
data.head()

 接下来我们要画的图是双轴图,这种图的特点是两个y轴,共用一个x轴,这样我们可以清晰地知道某两个数据在同一个标准下的变化过程

import matplotlib.mlab as mlap
from scipy.stats import norm

hist()函数会返回n, bins, patches


参数值:

        hist的参数非常多,但常用的有以下6个,只有第一个是必须的,后面5个可选

        x: 作直方图所要用的数据,必须是一维数组。多维数组可以先进行扁平化再作图

        bins: 直方图的柱数,可选项,默认为10

        normed: 是否将得到的直方图向量归一化。默认为0

        facecolor: 直方图颜色

        edgecolor: 直方图边框颜色

        alpha: 透明度

        histtype: 直方图类型,‘bar’, ‘barstacked’, ‘step’, ‘stepfilled’

返回值:

        n:直方图向量,是否归一化由参数normed设定。当normed取默认值时,n即为直方图各组内  元素的数量(各组频数)

        bins: 返回各个bin的区间范围

        patches:返回每个bin里面包含的数据,是一个list

fig = plt.figure(figsize = (5,5))
ax1 = fig.add_subplot(111)    #第一行第一列第一个子图
n, bins, patches = ax1.hist(data['评分'], bins = 100, color = 'c')

#添加细节
ax1.set_xlabel('评分', fontsize = 10)
ax1.set_ylabel('数量', fontsize = 10)
ax1.set_title('电影评分频率直方图', fontsize = 15)

#设置另一个y轴
y = norm.pdf(bins, data['评分'].mean(), data['评分'].std())
ax2 = ax1.twinx()    #共用一个x轴
ax2.plot(bins, y, 'r--')
ax2.set_ylabel('概率分布', fontsize = 15)

 

绘制散点图

x = data['时长']
y = data['评分']

plt.figure(figsize = (6,5))
plt.scatter(x, y)    #画散点图要有x轴, y轴

plt.xlabel('时长', fontsize = 10)
plt.ylabel('评分', fontsize = 10)
plt.title('评分时长散点图', fontsize = 15)

 由于数据太多,导致图形显示有点冗余,我们可以选取数据的百分之一来进行观察

x = data['时长'][::100]
y = data['评分'][::100]

plt.figure(figsize = (5,5))
plt.scatter(x, y)    #画散点图要有x轴, y轴

plt.xlabel('时长', fontsize = 10)
plt.ylabel('评分', fontsize = 10)
plt.title('评分时长散点图', fontsize = 15)

 绘制各个地区的箱线图

美国地区箱线图

df = data[data.产地 == '美国']['评分']

plt.figure(figsize = (5, 5))
plt.boxplot(df, whis = 2)   #异常值为2
plt.title('美国电影箱线图', fontsize = 15)
plt.grid()     #添加网格线

多组数据的箱线图

data1 = data[data.产地 == '中国大陆']['评分']
data2 = data[data.产地 == '日本']['评分']
data3 = data[data.产地 == '中国香港']['评分']
data4 = data[data.产地 == '法国']['评分']
data5 = data[data.产地 == '英国']['评分']
plt.figure(figsize = (10,10))
plt.boxplot([data1,data2,data3,data4,data5], labels=['中国大陆','日本','中国香港','法国','英国'], whis = 2)
plt.title('五个地区电影评分箱线图', fontsize = 15)
plt.grid()

 用vert属性来旋转箱线图

plt.figure(figsize = (10,10))
plt.boxplot([data1,data2,data3,data4,data5], labels=['中国大陆','日本','中国香港','法国','英国'], whis = 2, vert = False)
plt.title('五个地区电影评分箱线图', fontsize = 15)
plt.grid()

 

%pylab inline
result = pd.plotting.scatter_matrix(data[::100], diagonal = 'kde', color = 'r', alpha = 0.5, figsize = (10, 10))

 

%pylab inline
reault = pd.plotting.scatter_matrix(data[::100], diagonal = 'hist', color = 'c', alpha = 0.5, figsize = (8,8))

 使用seaborn库画热力图

import seaborn as sns

corr=data.corr()
corr=abs(corr)

fig=plt.figure(figsize=(10,8))
ax=fig.add_subplot()

ax=sns.heatmap(corr,vmax=1,vmin=0,annot=True)

plt.xticks(fontsize=15)
plt.yticks(fontsize=15)

 

  • 5
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值