文章目录

  • 前提工作
  • twinx() —— 双轴图(折线图+柱状图)的绘制
  • plt.scatter() —— 散点图的绘制
  • plt.boxplot() —— 箱形图的绘制
  • seaborn.heatmap() —— 热力图(相关系数矩阵图)
  • 夹带私货
  • 总结

  
  
  
  

前提工作

  

import numpy as np
import pandas as pd
import matplotlib.pyplot as pltimport warnings
warnings.filterwarnings('ignore')    # 去掉警告plt.rcParams['font.sans-serif'] = ['SimHei']    # 确保中文正常显示
plt.rcParams['axes.unicode_minus'] = False    # 确保负号正常显示df = pd.read_excel(r'D:\数据分析\movie_data3.xlsx')

  
  
  
  

twinx() —— 双轴图(折线图+柱状图)的绘制

  

所谓双轴图,其实就是双y轴图,即一个图有两个y轴。

既然y轴都有两个了,理所当然双轴图中的图也有两个。一个图定位坐标时看左边y轴,另一个看右边y轴。

双轴图并不固定里面两个图的类型,可以 折线图+柱状图 ,也可以 两个折线图,随心所欲。目前双轴图支持的展示类型柱形图、折线图、堆积柱形图、面积图这四类图表样式。
不过一般来说是 折线图+柱状图。

  

要实现双轴操作,就要用到 twinx() 函数了。

  

根据电影评分绘制电影数量和评分的频率分布双轴图

  • x轴:评分
  • 图左边的y轴:表示电影数量
  • 图右边的y轴:表示概率分布

  
生成概率密度函数,需要导包

from scipy.stats import norm
fig = plt.figure(figsize = (10,8))# 1.生成频率分布直方图
ax1 = fig.add_subplot(111)
n,bins,patches = ax1.hist(df['评分'],bins = 100,alpha = 0.7)ax1.set_xlabel('评分',fontsize = 15)
ax1.set_ylabel('电影数量',fontsize = 15)
ax1.set_title('频率分布图',fontsize = 20)# 2.生成绘制曲线图用的正态分布概率密度函数# scipy.stats.norm函数 : 可以实现正态分布
# pdf函数 : 生成概率密度函数(概率论学的那)
# 上面两个合起来  norm.pdf : 生成正态分布概率密度函数# 此时我们需要一个均值(μ)为评分的均值,方差(σ²)为评分的标准差这样一个正态分布概率密度函数
y = norm.pdf(bins,df['评分'].mean(),df['评分'].std())
# 第一个参数是前面hist函数的返回值   第二个参数:均值   第三个参数:方差# 3.生成曲线图
ax2 = ax1.twinx()    # ax2与ax1共用一个x轴
ax2.plot(bins,y,'y--')    # 为了打造双轴图,就得把y绘制到图形中
ax2.set_ylabel('评分的概率分布',fontsize = 15)

PS:这看起来怪麻烦,其实不然,只是举的这个例子难了,因为曲线是拿正态分布概率密度函数画的。概率论学的。
  

简单来说,双轴图画法就是在画两个图的基础上加上了 twinx() 操作。即,一个图上画两种图案,这两两个图案用 twinx() 联系起来。这样好理解多了。

  
  
  
  

plt.scatter() —— 散点图的绘制

  

两组数据构成多个坐标点,考察坐标点的分布,判断两变量之间是否存在某种关联或总结坐标点的分布模式。

散点图将序列显示为一组点。值由点在图表中的位置表示。类别由图表中的不同标记表示。散点图通常用于比较跨类别的聚合数据。

  

根据电影时长和电影评分绘制散点图

x = df.时长
y = df.评分plt.figure(figsize = (10,8))
plt.scatter(x,y)
plt.title('电影时长与评分的散点图',fontsize = 20)
plt.xlabel('时长',fontsize = 18)
plt.ylabel('时长',fontsize = 18)
plt.tick_params(labelsize = 14)    # 坐标轴上字体大小


  
这样绘制的图有个问题,由于数据量过大,所以画出来的图非常冗余难看。

  

改进:

提取原有数据的 百分之一

x = df.时长[::100]
y = df.评分[::100]

只需把 x,y 数据每隔 100 个提取一次即可,这样就能得到原有数据的 百分之一

下面的代码不变

  

绘制图形时,在 plt.scatter() 中还可以加color参数设置点的颜色和 maker 参数设置点的 形状
  

marker 属性:

设置散点的形状

marker 形状
‘.’
‘,’ 像素点
‘o’
‘v’ 倒三角点
‘^’ 上三角点
‘<’ 左三角点
‘>’ 右三角点
‘1’ 下三叉点
‘2’ 上三叉点
‘3’ 左三叉点
‘4’ 右三叉点
‘8’ 八角形点
‘s’ 正方形点
‘p’ 五角点
‘*’ 星星点
‘h’ 六边形点1
‘H’ 六边形点2
‘+’ 加号点
‘x’ 乘号点
‘D’ 钻石
‘d’ 细钻
‘|’ v线
‘_’ H线

  
绘图时就利用marker属性设置散点形状

plt.scatter(x,y,color = 'b',marker = 'D')

  
  
  
  

plt.boxplot() —— 箱形图的绘制

  

箱型图是一种用作显示一组数据分散情况资料的统计图。因形状如箱子而得名。在各种领域也经常被使用,常见于品质管理。它主要用于反映原始数据分布的特征,还可以进行多组数据分布特征的比较。箱线图的绘制方式是:先找出一组数据的中位数、两个四分位数、上下边缘线;然后,连接两个四分位数画出箱子;再将上下边缘线与箱子连接,中位数在箱子中间。

  

plt.boxplot() 的参数:

  • x :指定要绘制箱形图的数据。
  • sym :指定异常的形状,默认为 +号 显示。
  • labels :图例,添加标签。
  • whis :指定上下须与上下四分位的位置,默认为1.5倍的四分位差。指定异常值的范围,大代表宽松;小代表,紧。
  • flierprops :设置异常值的属性,如异常点的形状、大小、填充色等。
  • notch :是否是凹⼝的形式展现箱线图,默认⾮凹⼝。
  • vert :箱形图如何摆放,横着还是竖着,默认垂直摆放。
  • positions :指定箱线图的位置,默认为[0,1,2…]。
  • widths :指定箱线图的宽度,默认为0。
  • patch_artist :是否填充箱体的颜⾊。
  • meanline :是否用线的形式表示均值,默认用点来表示。
  • meanprops :设置均值的属性,如点的⼤⼩、颜⾊等。
  • capprops :设置箱线图顶端和末端线条的属性,如颜⾊、粗细等。
  • whiskerprops :设置须的属性,如颜⾊、粗细、线的类型等。

  

美国电影评分的箱形图

plt.figure(figsize = (10,6))
plt.boxplot(data,whis = 2,flierprops = {'marker':'o','markerfacecolor':'r','color':'k'},patch_artist = True,boxprops = {'color':'k','facecolor':'#9999ff'})
# flierprops —— 异常值属性设置。   markerfacecolor 填充色    color 边框线    patch_artist 箱体颜色是否能修改
# boxprops —— 填充箱体颜色。  color 外边框线    facecolor 填充色    plt.title('美国电影评分',fontsize = 20)plt.show()

  

多组数据的箱形图

把多个数据都放在一个箱形图中,进行并列展示,然后进行各种数据间的比较。

data1 = df[df.产地 == '中国大陆']['评分']
data2 = df[df.产地 == '日本']['评分']
data3 = df[df.产地 == '中国香港']['评分']
data4 = df[df.产地 == '英国']['评分']
data5 = df[df.产地 == '法国']['评分']plt.figure(figsize = (12,8))
plt.boxplot([data1,data2,data3,data4,data5],labels = ['中国大陆','日本','中国香港','英国','法国'],whis = 2,flierprops = {'marker':'o','markerfacecolor':'r','color':'k'},patch_artist = True,boxprops = {'color':'k','facecolor':'#9999ff'})
plt.title('电影评分',fontsize = 20)
plt.tick_params(labelsize = 14)    # 坐标轴上字体大小# 设置坐标轴的颜色
ax = plt.gca()    # gca : 得到当前的坐标系
ax.patch.set_facecolor('gray')
ax.patch.set_alpha(0.2)plt.show()

  

通过 vert 属性可以把图旋转

构造箱形图时,plt.boxplot 中加个 vert 属性即可

plt.boxplot([data1,data2,data3,data4,data5],vert = False,labels = ['中国大陆','日本','中国香港','英国','法国'],whis = 2,flierprops = {'marker':'o','markerfacecolor':'r','color':'k'},patch_artist = True,boxprops = {'color':'k','facecolor':'#9999ff'})

其他代码不变

  
  
  
  

seaborn.heatmap() —— 热力图(相关系数矩阵图)

  

seaborn 是一个精简的python库,可以创建具有统计意义的图表,能理解pandas的DataFrame类型。

  

seaborn.heatmap 参数:
  

(1)热力图输入数据参数:

  • data :矩阵数据集,可以是numpy的数组(array),也可以是pandas的DataFrame。如果是DataFrame,则 df 的 index/column 信息会分别对应到 heatmap 的 columns 和 rows,即 pt.index 是热力图的行标,pt.columns 是热力图的列标。
      

(2)热力图矩阵块颜色参数:

  • vmax,vmin :分别是热力图的颜色取值最大和最小范围,默认是根据data数据表里的取值确定。
  • cmap :从数字到色彩空间的映射,取值是 matplotlib 包里的 colormap 名称或颜色对象,或者表示颜色的列表。
  • center :改参数默认值。如果数据表取值有差异时,设置热力图的色彩中心对齐值;能调整生成的图像颜色的整体深浅;设置 center 数据时,如果有数据溢出,则手动设置的 vmax、vmin 会自动改变 robust,默认为False。
      

(3)热力图矩阵块注释参数:

  • annot :默认False。如果是True,在热力图每个方格写入数据;如果是矩阵,在热力图每个方格写入该矩阵对应位置数据。
  • fmt :字符串格式代码,矩阵上标识数字的数据格式,比如保留小数点后几位数字。
  • annot_kws :默认False。如果是True,设置热力图矩阵上数字的大小颜色字体,matplotlib包text类下的字体设置。
      

(4)热力图矩阵块之间间隔及间隔线参数:

  • linewidths :定义热力图里 “标识两两特征关系的矩阵小块”之间的间隔大小。
  • linecolor :切分热力图上每个小块的线的颜色,默认值是 ‘white’。
      

(5)热力图颜色刻度条参数:

  • cbar :是否在热力图侧边绘制颜色刻度条,默认是True。

    • cbar_kws :热力图侧边绘制颜色刻度条时,相关字体设置,默认值是None。
    • cbar_ax :热力图侧边绘制颜色刻度条时,刻度条位置设置,默认值是None。

  

求投票人数,评分,时长 ,这三个属性间的相关系数矩阵图

# 把这三列取出来
data = df[['投票人数','评分','时长']]


  

先导入:

import seaborn as sns

求参数:

corr = data.corr()    # 求相关系数
corr = abs(corr)      # 不想考虑正相关还是负相关,只想考虑相关程度

绘图:

fig = plt.figure(figsize = (10,8))
ax = fig.add_subplot(1,1,1)ax = sns.heatmap(corr,annot = True,annot_kws = {'size':13,'weight':'bold'},linewidths = 0.05)plt.xticks(fontsize = 15)    # 设置x轴字体大小
plt.yticks(fontsize = 15)    # 设置y轴字体大小
# 等同于
# plt.tick_params(labelsize = 14)    # 坐标轴上字体大小

  

  

pandas 本身也封装了画图函数

我们可以画出各个属性之间的散点图,对角线是分布图

data = df[['投票人数','评分','时长']]%pylab inline
result = pd.plotting.scatter_matrix(data[::100],diagonal = 'kde',color = 'k',alpha = 0.2,figsize = (10,10))
# diagonal 对角线设置

  
  
  
  

夹带私货

  

各电影评价人数柱状图

import matplotlib.pyplot as plt
import numpy as np
import pandas as pdimport warningswarnings.filterwarnings('ignore')  # 去掉警告plt.rcParams['font.sans-serif'] = ['SimHei']  # 确保中文正常显示
plt.rcParams['axes.unicode_minus'] = False  # 确保负号正常显示# 各电影评价人数柱状图df = pd.read_csv(r'D:\pro1\实战案例\douban.csv')
df = df[['片名', '评价人数']]plt.figure(figsize=(10, 6))
plt.bar(df.片名, df.评价人数)
plt.title('各电影评价人数', fontsize=20)   # 设置图的标题(fontsize是字体大小)
plt.xlabel('电影', fontsize=18)   # x轴名字
plt.ylabel('评价人数', fontsize=18)     # y轴名字
plt.tick_params(labelsize=12)   # 坐标轴上字体大小
plt.xticks(rotation=90)     # 把字旋转多少度。x轴上的字都挤在一起了,把字竖着写# 把数字显示在柱上(每个柱子都显示就得用循环)
for a, b in zip(df.片名, df.评价人数):plt.text(a, b + 30000, b, ha='center', fontsize=10, va='bottom')plt.show()

  

各电影评价人数和评分情况双轴图

import matplotlib.pyplot as plt
import numpy as np
import pandas as pdimport warningswarnings.filterwarnings('ignore')  # 去掉警告plt.rcParams['font.sans-serif'] = ['SimHei']  # 确保中文正常显示
plt.rcParams['axes.unicode_minus'] = False  # 确保负号正常显示# 各电影评价人数和评分情况双轴图df = pd.read_csv(r'D:\pro1\实战案例\douban.csv')
df = df[['片名', '评价人数', '评分']]fig = plt.figure(figsize=(10, 6))
ax1 = fig.add_subplot(111)
ax1.bar(df.片名, df.评价人数, alpha=0.7)
ax1.set_title('各电影评价人数和评分情况', fontsize=20)  # 设置图的标题(fontsize是字体大小)
ax1.set_xlabel('电影', fontsize=18)  # x轴名字
ax1.set_ylabel('评价人数', fontsize=18)  # y轴名字
ax1.tick_params(labelsize=14)  # 坐标轴上字体大小
plt.xticks(rotation=90)  # 把字旋转多少度。x轴上的字都挤在一起了,把字竖着写ax2 = ax1.twinx()
ax2.plot(df.片名, df.评分, 'y')
ax2.set_ylabel('评分', fontsize=18)plt.show()

  
  
  
  

总结

  

暑假在家里花了一个星期时间,把numpy、pandas和matplotlib这三个数据分析库做了个大致的了解,目前对于Python数据分析的学习暂时告一段落了。接下来一段时间要继续Java的学习,并且在6月底吧,开始学数学建模的一些算法,因为听说学校会在6月底给参加建模的学生培训。

学到这里时其实挺感慨的,因为这个暑假是我人生中唯一一个开始认真学习的假期,哪怕是高二的暑假,我也没有像现在这样努力。每天早上8点坐到书桌上,一坐就是晚上12点或1点,目前已经坚持一个星期了,因为暑假才放了一个星期嘛哈哈。真不可思议,我现在能克制住所有欲望在假期里专注学习,这是我之前任何时候都不敢想的,希望一直保持下去吧。如果这个暑假每一天都能利用好,我相信我距离大厂又会更进一步。

还有一点让我欣慰,就是之前一个大佬,我就直接指名道姓吧哈哈,就是铁甲小宝大佬帮助我面试讲师的时候,给了我一些他的项目,其中有爬虫和豆瓣影评可视化。当时我看了这些项目时,表示啥也看不懂,但为了能面试上某教育机构的讲师,我硬着头皮说这些是我做的项目。彼时,我连Python基础都不好,连个简单的管理系统都写不出来,更别提会这些了,我连听都没听说过!还记得他跟我说爬虫的时候,我还以为他在逗我,我根本想不到爬虫竟然是一个技术的名字,我还反复跟他确认那个项目叫啥?叫爬虫?离谱的名字! 额额 现在看之前的自己太蠢了。现在算是今非昔比了,爬虫项目我早就做了,豆瓣影评可视化就是上面的“夹带私货” 哈哈。我用了不同的方法做的,并且也对图做了一些改进,肯定要比他给我的要好看许多了,哈哈并没有说大佬不好的意思。

我也在慢慢进步,从最早的3月份小菜鸡,到现在6月份小菜鸟,进行了从鸡到鸟的飞翔蜕变。哈哈开玩笑的。3个月时间,我学了不少东西,不过这是次要的。最重要的是3个月时间,让我对于未来不再迷茫了,至少不会像之前那样不知道该干啥。

努力坚持住,目前大二暑假,还有两年毕业,这两年利用好,我今后的人生可能都会变得不一样,加油吧骚年!

现在凌晨快1点了,属实是网易云时间到了,不能再写这有的没的了,明天还要继续干活呢,下播了兄弟们!

Python 数据分析 —— Matplotlib ②相关推荐

  1. Python 数据分析——Matplotlib相关知识

    Python 数据分析--Matplotlib相关知识 第五章 Matplotlib相关知识 -- 样式 文章目录 Python 数据分析--Matplotlib相关知识 前言 一.matplotli ...

  2. Python数据分析——Matplotlib数据可视化基础(二)

    Python数据分析--Matplotlib数据可视化基础(二) 思维导图: 图形的绘制 认识要绘制的图形 基本绘图流程 pyplot基础图表函数 pyplot饼图的绘制 pie函数 matplotl ...

  3. python画曲线图例-Python数据分析-Matplotlib图标绘制

    Matplotlib介绍 Matplotlib是一个强大的Python绘图和数据可视化的工具包. Matplotlib的主要功能 Matplotlib是python中的一个包,主要用于绘制2D图形(当 ...

  4. Python数据分析——matplotlib

    ​ 数据分析是用适当的方法对收集来的大量数据进行分析,帮助人们作出判断,以便采取适当行动.数据分析也是机器学习课程的基础. matplotlib:最流行的Python底层绘图库,主要做数据可视化图表, ...

  5. python数据分析----matplotlib、numpy

    数据分析: 数据分析 基础概念和环境 matplotlib numpy pandas 第一部分综述 1.为什么学习数据分析 2.什么是数据分析 数据分析是用适当的方法对收集来的大量数据进行分析,帮助人 ...

  6. python 二维强度图_荐 python数据分析matplotlib库使用之二维图形绘制

    本篇内容会在后期不定时更新 什么是matplotlib matplotlib是最流行的python底层绘图库,主要做数据可视化图表. 为什么要学习matplotlib 能将数据进行可视化,更直观的呈现 ...

  7. python数据分析 - matplotlib绘图

    文章目录 matplotlib概述 matplotlib基本功能 matplotlib基本功能详解 基本绘图 绘图核心API 线型.线宽和颜色 设置坐标轴范围 设置坐标刻度 设置坐标轴 图例 特殊点 ...

  8. python数据分析-matplotlib可视化

    1.绘制一天内温度的折线图 1.1 折线图基础绘制 一天之内的温度从凌晨2点开始,每隔2小时测量一次温度,12次温度数据为 y = [15, 13, 14, 5, 17, 20, 25, 26, 24 ...

  9. Python数据分析 ——Matplotlib数据可视化

    ⭐Matplotlib使用和Matlab中绘图方法类似,如果使用过Matlab会更容易理解一些.

  10. python数据分析-matplotlib散点图-条形图的绘制以及完整方法归纳02

    matplotlib的基本使用02 一.散点图的绘制 二.散点图绘图步骤及案例解析 1.导入模块 2.设置散点图所有字符的字体样式 3.编写主体代码 4.主题代码解析 5.图形展示 三.条形图的绘制 ...

最新文章

  1. leetcode--Reverse Integer
  2. Helloj2ee WPF书评系列——缘起
  3. vue新版本和旧版本关闭eslint总结
  4. 聚类算法:K-Means
  5. 7-2 输出约数 (9 分)
  6. PHP的性能大坑--strtotime函数
  7. 移位 c语言一个变量存储两个值,【杭州C  培训】C语言中基础小问题总结
  8. dubbo接口demo开发
  9. Memcached FAQ(2) 集群架构方面的问题
  10. R语言--自定义函数证明中心极限定理
  11. 控制文件全部丢失的恢复测试
  12. python protoc
  13. 【IoT】产品组合投资地图:如何将产品战略与执行联系起来?
  14. Js~弹出框插件jquery.boxy
  15. 产品经理为什么比程序员工资要高?百度员工:因为他是产品灵魂
  16. 电脑磁盘空间莫名其妙满了
  17. Centos7中病毒排查[tsm][kswapd0]
  18. 微信气泡主题设置_米老鼠微信主题怎么设置? 米老鼠微信主题气泡设置教程来啦!...
  19. 《BIGEMAP地图软件》荣登2017、2018年度论坛《最受欢迎谷歌地图软件》
  20. 常用传感器讲解十五--触摸传感器(KY-036)

热门文章

  1. java-opencv 米粒数_Python opencv学习音符的米粒数,返回每个米粒的位置面积和总米粒数的平均面积,pythonopencv,笔记,之数,并,一个,及,个数...
  2. 网课搜题公众号接口怎么对接?最新接口-麦麦题
  3. [每天一个知识点]25-职业生涯-核桃皮是当水果吃好还是当蔬菜吃好?
  4. 八年级计算机考试试题奥运会,八年级信息技术考试试题及答案
  5. 网络层安全协议IPSec
  6. SAS学习7(gpolt过程、gchart过程、图形输出、ods功能、假设检验,ttest过程,rank过程,秩和检验(非参数检验))
  7. 跨考计算机 专硕还是学硕,考研我该如何抉择!专硕学硕不纠结
  8. kong翻译_最全的中国姓氏英文说法,你知道自己的姓氏怎么翻译吗?
  9. python用户画像_python用户画像
  10. 牛客网算法之洗牌详解