matplotlib

五、Matplotlib:绘图和可视化#

  • 简介
  • 简单绘制线形图
  • plot函数
  • 支持图类型
  • 保存图表

1、简介#

Matplotlib是一个强大的Python绘图和数据可视化的工具包。数据可视化也是我们数据分析的最重要的工作之一,可以帮助我们完成很多操作,例如:找出异常值、必要的一些数据转换等。完成数据分析的最终结果也许就是做一个可交互的数据可视化。

安装方式:

pip install matplotlib

引用方法:

import matplotlib.pyplot as plt

2、简单绘制线形图#

plt.plot()   # 绘图函数
plt.show()   # 显示图像

在jupyter notebook中不执行这条语句也是可以将图形展示出来

import matplotlib.pyplot as plt
import numpy as np
data = np.arange(10)
plt.plot(data)
plt.show() # 显示图像,在notebook中不执行这一句也可以

执行结果:

 虽然seaborn这些库和pandas的内置绘图函数能够处理许多普通的绘图任务,如果需要自定义一些高级功能的话就必须要matplotlib API.

3、plot函数#

plot函数:绘制折线图

  • 线型linestyle(-,-.,--,..)
  • 点型marker(v,^,s,*,H,+,X,D,O,...)
  • 颜色color(b,g,r,y,k,w,...)

  plt.rcParams['font.sans-serif'] = ['SimHei']   # 设置字体样式
  plt.rcParams['axes.unicode_minus'] = False     # 自动转编码 允许中文可以显示


plt.plot([0,3,9,15,30],linestyle = '-.',color = 'r',marker = 'o') # linestyle:折线样式 color:颜色 marker:节点标记

 图像标注:

方法描述 
plt.title() 设置图像标题  
plt.xlabel() 设置x轴名称  
plt.ylabel() 设置y轴名称  
plt.xlim() 设置x轴范围  
plt.ylim() 设置y轴范围  
plt.xticks() 设置x轴刻度  
plt.yticks() 设置y轴刻度  
plt.legend() 设置曲线图例
复制代码
plt.plot([0,3,9,15,30],linestyle = '-.',color = 'r',marker = 'o',label="A") 
plt.plot([1,3,16,23,30],[30,23,13,25,30],label='B')
plt.title("Title")  # 标题
plt.xlabel('X')  # x轴名称
plt.ylabel('Y')  # y轴名称

plt.xticks(np.arange(0,30,2))  # x轴刻度
plt.xlim(-0.2,10,2)  # x轴范围
plt.legend()  # 曲线图例
复制代码

运行图例:

绘制数学函数:

使用Matplotlib模块在一个窗口中绘制数学函数y=x, y=x**2,y=sinx的图像,使用不同颜色的线加以区别,并使用图例说明各个线代表什么函数。 

复制代码
x = np.arange(-100,100)
y1 = x
y2 = x ** 2
y3 = np.sin(x)
-----------------------
plt.plot(x,y1,label="y=x")
plt.plot(x,y2,label="y=x^2")
plt.plot(x,y3,label="y=sin(x)")

plt.ylim(-100,100)
plt.legend()
复制代码

运行结果:

4、支持的图类型#

函数说明 
plt.plot(x,y,fmt) 坐标系  
plt.boxplot(data,notch,position) 箱型图  
plt.bar(left,height,width,bottom) 柱状图  
plt.barh(width,bottom,left,height) 横向柱状图  
plt.polar(theta,r) 极坐标系  
plt.pie(data,explode) 饼图  
plt.psd(x,NFFT=256,pad_to,Fs) 功率谱密度图  
plt.specgram(x,NFFT=256,pad_to,F) 谱图  
plt.cohere(x,y,NFFT=256,Fs) X-Y相关性函数  
plt.scatter(x,y) 散点图  
plt.step(x,y,where) 步阶图  
plt.hist(x,bins,normed) 直方图

#
柱状图 data = [12,34,23,54] labels = ['Jan','Fed','Mar','Apr'] plt.xticks([0,1,2,3],labels) # 设置x轴刻度 plt.bar([0,1,2,3],data)

# 横向柱状图
data = [12,34,23,54]
labels = ['Jan','Fed','Mar','Apr']
plt.yticks([0,1,2,3],labels)
plt.barh([0,1,2,3],data)    

复制代码
# DataFrame数组图
df = pd.DataFrame({
    'Jan':pd.Series([1,2,3],index=['a','b','c']),
    'Fed':pd.Series([4,5,6],index=['b','a','c']),
    'Mar':pd.Series([7,8,9],index=['b','a','c']),
    'Apr':pd.Series([2,4,6],index=['b','a','c'])
})
df.plot.bar()  # 水平柱状图,将每一行中的值分组到并排的柱子中的一组
df.plot.barh(stacked=True,alpha=0.5)  # 横向柱状图,将每一行的值堆积到一起
复制代码

# 饼图
plt.pie([10,20,30,40],labels=list('abcd'),autopct="%.2f%%",explode=[0.1,0,0,0])  # 饼图
plt.axis("equal")
plt.show()

# 散点图
import random
x = np.random.randn(100)
y = np.random.randn(100)
plt.scatter(x,y)

5、保存图表到文件#

 plt.savafig('文件名.拓展名')

 文件类型是通过文件扩展名推断出来的。因此,如果你使用的是.pdf,就会得到一个PDF文件。

plt.savefig('123.pdf')

savefig并非一定要写入磁盘,也可以写入任何文件型的对象,比如BytesIO:

from io import BytesIO
buffer = BytesIO()
plt.savefig(buffer)
plot_data = buffer.getvalue()
参数说明 
fname 含有文件路径的字符串或者Python的文件型对象。  
dpi 图像分辨率,默认为100  
format 显示设置文件格式("png","jpg","pdf","svg","ps",...)  
facecolor、edgecolor 背景色,默认为"W"(白色)  
bbox_inches 图表需要保存的部分。设置为”tight“,则尝试剪除图表周围空白部分

 练习题:#

测试数据连接:https://share.weiyun.com/5WO0KMA

 1.绘制每个国家或者地区的电影数量的柱状图

复制代码
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt

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

plt.figure(figsize=(13,6))   # 设置画布大小

df = pd.read_csv('./douban_movie.csv')  # 读取文件



res = df.groupby('产地').size().sort_values(ascending=False)  # 以产地分组 进行排序

plt.title('每个国家或者地区的电影数量', fontsize=20)

x = res.index  # 产地作为x轴

y = res.values           # 值作为y轴

plt.xlabel('产地', fontsize=20,color='blue')

plt.xticks(rotation=90, fontsize=15) 
plt.ylabel('数量',fontsize=20,color='red')

for a, b in zip(x,y):  # 通过zip将x y进行映射
    plt.text(a, b+100, b, horizontalalignment='center', fontsize=13) # a:x轴 b:y轴 horizontalalignment:水平居中 b+100:不要紧挨柱子

plt.bar(x,y)    # 绘制树状图

plt.show()
绘制每个国家或者地区的电影产量
复制代码

 2.绘制每年电影上映数量的曲线图

复制代码
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt

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

plt.figure(figsize=(13,6))  # 设置画布大小

plt.title('每年电影上映数量的曲线图',fontsize=15,color='black')


plt.xlabel('年代',fontsize=20,color='red')
plt.ylabel('数量',fontsize=20,color='blue')

df = pd.read_csv('./douban_movie.csv')  # 读取文件
 
res = df.groupby('年代').size().sort_index()[:-2]  # 按照索引进行排序  切除不需要的脏数据
x = res.index   # 获取x轴的值
y = res.values  # 获取y轴的值


plt.plot(x,y)   # 绘制折线图
plt.show()      # 展示
绘制每年电影上映数量的曲线图
复制代码

3:根据电影的长度绘制饼图

复制代码
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt

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


plt.title('电影时长分布图',fontsize=15,color='black')

plt.figure(figsize=(10,13))  # 设置画布大小
df = pd.read_csv('./douban_movie.csv')  # 读取文件

df_res = df['时长']
res = pd.cut(df_res,[0,60,90,120,150,180,210])   # df_res被切割的数据 列表为切割的范围
res1 = res.value_counts()    # 获取在一定分为内值的个数

x = res1.index
y = res1.values
patch, l_text, p_text = plt.pie(y, labels = x, autopct='%.2f%%')   # autopct:百分比展示

for p in p_text:
    p.set_size(15)
    p.set_color('white')

for l in l_text:
    l.set_size(13)
    l.set_color('r')
    
plt.pie(res1)              # 设置饼状图

plt.show()
根据电影的长度绘制饼图
复制代码

 

 

posted @   SR丶  阅读(1041)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
阅读排行:
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 零经验选手,Compose 一天开发一款小游戏!
· 一起来玩mcp_server_sqlite,让AI帮你做增删改查!!
点击右上角即可分享
微信分享提示
CONTENTS