python利用Matplotlib.pyplot库绘制不同的图形,但是在显示中文时存在部分问题,一般在导入库后,添加如下代码:

# 设置中文正常显示
plt.rcParams['font.sans-serif'] = ['SimHei']
# 设置负号正常显示
plt.rcParams['axes.unicode_minus'] = False

1.折线图

一般折线图

输入:

# 画出折线图

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt # 设置中文正常显示
plt.rcParams['font.sans-serif'] = ['SimHei']
# 设置负号正常显示
plt.rcParams['axes.unicode_minus'] = False # 读取数据
unrate = pd.read_csv(r'D:\codes_jupyter\数据分析_learning\课件\03_matplotlib\UNRATE.csv', engine='python') # 结合数据形式,将数据的日期格式进行转化
unrate['DATE'] = pd.to_datetime(unrate['DATE'])
print(unrate.head()) # 画图
First_twelve = unrate[0:12] # 拿12个月份的数据进行画图 # plot()画折线图。函数传入两个值,左边的值作为x轴,右边的值作为y轴
plt.plot(First_twelve['DATE'], First_twelve['VALUE'])
# show()函数显示图片
plt.show()

输出:

折线图设置

对折线图操作,添加标签、标题,并对坐标刻度进行设置

输入:

# 对折线图操作,添加标签、标题,并对坐标刻度进行设置

unrate['DATE'] = pd.to_datetime(unrate['DATE'])
First_12 = unrate[0:12]
plt.plot(First_12['DATE'], First_12['VALUE']) # 对横坐标进行一定的变换
# rotation=45 表示转动45°
plt.xticks(rotation=90) # 添加标签
plt.xlabel('月份')
plt.ylabel('失业率') # 添加标题
plt.title('1948年失业率走势') plt.show()

输出:

2.子图

子图概念

fig.add_subplot(4,1,x)函数画子图
 参数表示画4行1列,共4个子图,垂直排列,每行一个图,x表示第x个子图
 参数:(2,2,x)表示两行两列,4个图,每行2个图,x表示第x个子图
 参数:(2,3,x)表示2行3列,每行3个子图,x表示第x个子图

绘制子图

使用add_subplot()绘制子图,并通过figsize()制定画板大小

输入:

# add_subplot()添加子图,figsize()指定画板大小

import matplotlib.pyplot as plt

# figsize=(x, y)指定画板, 不填写参数表示默认值
# fig = plt.figure()
fig = plt.figure(figsize=(10, 6)) # 通过figsize=(x, y)指定画板大小 # 对第一个子图进行操作
ax1 = fig.add_subplot(2, 2, 1)
ax1.plot(np.random.randint(1, 5, 5), np.arange(5)) # 生成随机整数 # 对第二个子图进行操作
ax2 = fig.add_subplot(2, 2, 2)
ax2.plot(np.random.randint(1, 5, 5), np.arange(5)) # 对第四个子图进行操作
ax4 = fig.add_subplot(2, 2, 4)
ax4.plot(np.random.randint(1, 5, 5), np.arange(5)) plt.show()

输出:

绘制多条折线

在一张图上画出多条折线

输入:

# 一张图上画出多条曲线

# 拿到日期的月份。
# dt.month获取datetime类型值的月份
unrate['MONTH'] = unrate['DATE'].dt.month # 指定画板大小
fig = plt.figure(figsize=(6, 3)) # 画图 通过c='red'指定线条颜色
plt.plot(unrate[:12]['MONTH'], unrate[:12]['VALUE'], c='red')
plt.plot(unrate[12:24]['MONTH'], unrate[12:24]['VALUE'], c='blue') plt.show()

输出:

添加图例1

使用for循环绘制多条折线,并添加对应的图例说明

输入:

# for循环画出多条折线,并添加图例说明

fig = plt.figure(figsize=(10, 6))
color = ['r', 'b', 'orange', 'black', 'green'] for i in range(5):
start_index = i * 12
end_index = (i+1) * 12 # 取范围
subset = unrate[start_index: end_index] # 给每条线添加标签
label = str(1948 + i)
plt.plot(subset['MONTH'], subset['VALUE'], c=color[i], label=label) # 将图例说明自动放置合适位置
plt.legend(loc='best', fontsize=10, ncol=2)
plt.show() # plt.legend()函数显示图例
# loc参数设置位置
# fontsize设置图例字体大小
# ncols 设置用多少列显示图例
# loc='best':将图例说自动添加到合适位置
# loc='center':将图例放置在中心
# 通过print(help(plt.legend))查看其它参数

输出:

设置线条宽度

输入:

# 设置线宽度

fig = plt.figure(figsize=(10, 6))
color = ['r', 'b', 'orange', 'black', 'green']
for i in range(5):
start_index = i * 12
end_index = (i+1) * 12
subset = unrate[start_index: end_index]
label = str(1948 + i) # linewidth=10设置线宽度
plt.plot(subset['MONTH'], subset['VALUE'], c=color[i], label=label, linewidth=8)
plt.legend(loc='best', fontsize=10, ncol=2) # xticks的size设置坐标刻度字体的大小,yticks同理设置
plt.xticks(size=30)
plt.yticks(size=15) # 添加标签和标题
plt.xlabel('月份')
plt.ylabel('失业率')
plt.title('1948-1953年失业率走势图') plt.show()

输出:

添加图例2

输入:

import pandas as pd
import matplotlib.pyplot as plt women_degree = pd.read_csv(r'D:\codes_jupyter\数据分析_learning\课件\03_matplotlib\percent-bachelors-degrees-women-usa.csv', engine='python') # 设置颜色,label两侧的内容,图例,线宽
plt.plot(women_degree['Year'], women_degree['Biology'], color='blue', label='Women', linewidth=10)
plt.plot(women_degree['Year'], 100-women_degree['Biology'], c='green', label='Men', linewidth=10) # 在图中添加文本信息
plt.text(2005, 35, 'Men', size=25) # 在(2005,35)这个点添加信息,信息内容为后面的字符串,size为字体大小
plt.text(2005, 55, 'Women') # 设置图例
plt.legend(loc='upper right') # 设置title
plt.title('Precentage of Biology Awarded By Gender') # 设置是否显示网格
plt.grid(True) plt.show()

输出:

设置线型、点型及坐标轴

输入:

# 设置线型、点型、坐标轴

plt.figure(figsize=(10, 6))
x1 = np.arange(-2*np.pi, 2*np.pi, 0.01)
x2 = np.arange(-2*np.pi, 2*np.pi, 0.2) y1 = np.sin(3*x2)/x2
y2 = np.sin(2*x1)/x1
y3 = np.sin(x1)/x1 # linestyle设置线条类型;marker设置线条上点的风格
plt.plot(x2, y1, c='b', linestyle='--', marker='^')
plt.plot(x1, y2, c='r', linestyle='-')
plt.plot(x1, y3, c='g') # 获取Axes对象
ax = plt.gca()
# spines['right']获取有边框
ax.spines['right'].set_color('none') # set_color设置颜色为none
# spines['top']获取上边框
ax.spines['top'].set_color('none') # set_color设置颜色为none # 设置坐标轴
ax.xaxis.set_ticks_position('bottom') # 设置下边框为x轴
ax.spines['bottom'].set_position(('data', 0)) # 获取下边框,set_position设置坐标轴位置 ax.yaxis.set_ticks_position('left') # 设置左边框为y轴
ax.spines['left'].set_position(('data', 0)) # 设置y轴显示在刻度范围内,0的地方 plt.show() # set_position()传入元组
# ('data', 0) 表示将x轴放到数字0的位置
# 下面的一个表示将y轴放到数字0的位置
# 使用print(help(ax.spine['left'].set_position))查看帮助文档
# data 表示将坐标轴设置在刻度范围内部
# outwards 表示将坐标轴设置在整体刻度范围的最外面
# 第一个0 表示x轴在y轴的刻度0的地方,第二个0同理

输出:

设置刻度及坐标轴显示

输入:

# 设置刻度的显示、显示图的一部分

plt.figure(figsize=(10, 6))
x1 = np.arange(-2*np.pi, 2*np.pi, 0.01)
x2 = np.arange(-2*np.pi, 2*np.pi, 0.2) y1 = np.sin(3*x2)/x2
y2 = np.sin(2*x1)/x1
y3 = np.sin(x1)/x1 # linestyle设置线条类型;marker设置线条上点的风格
plt.plot(x2, y1, c='b', linestyle='--', marker='^')
plt.plot(x1, y2, c='r', linestyle='-')
plt.plot(x1, y3, c='g') # 设置要显示刻度的刻度值
# plt.xticks([-2*np.pi, -np.pi, 0, np.pi, 2*np.pi]) # 用后面的刻度,替换前面的刻度值
plt.xticks([-2*np.pi, -np.pi, 0, np.pi, 2*np.pi], ['-2π', '-π', '', 'π', '2π'], size=15) # 设置只显示刻度范围内的值
# plt.xlim((-1 * np.pi, np.pi))
# plt.ylim((0, 3)) plt.show()

输出:

3.柱形图

# 读取数据
import pandas as pd review = pd.read_csv(r'D:\codes_jupyter\数据分析_learning\课件\03_matplotlib\fandango_scores.csv', engine='python')
cols = ['FILM', 'RT_user_norm', 'Metacritic_user_nom', 'IMDB_norm', 'RT_norm', 'Fandango_Stars'] # 取出对应列
norm_review = review[cols]
norm_review.head()
FILM    RT_user_norm    Metacritic_user_nom    IMDB_norm    RT_norm    Fandango_Stars
0 Avengers: Age of Ultron (2015) 4.3 3.55 3.90 3.70 5.0
1 Cinderella (2015) 4.0 3.75 3.55 4.25 5.0
2 Ant-Man (2015) 4.5 4.05 3.90 4.00 5.0
3 Do You Believe? (2015) 4.2 2.35 2.70 0.90 5.0
4 Hot Tub Time Machine 2 (2015) 1.4 1.70 2.55 0.70 3.5

一般柱形图

输入:

# plt.bar函数,画柱形图

# 首先,指定柱的高度
bar_height = norm_review.loc[0, cols[1:]].values # 这里就取5家媒体对0号电影的评分值 # 其次,指定柱的位置
bar_position = np.arange(5) + 1
# print(bar_position) plt.figure(figsize=(10, 6)) # 使用plt.bar函数画柱状图
plt.bar(bar_position, bar_height, 0.5) # 0.5是设置柱的宽度
plt.show()

输出:

设置柱状图的颜色、文本注释、坐标轴格式、标题和标签

输入:

# 设置柱状图的颜色、文本注释、坐标轴格式、标题和标签

bar_height = norm_review.loc[0, cols[1:]].values
bar_position = np.arange(5) + 1
plt.figure(figsize=(10, 6)) # color属性,设置颜色
plt.bar(bar_position, bar_height, 0.5, color=['r', 'g', 'b']) # 设置一种颜色直接color=‘r’ # xticks替换坐标, 利用电影名替换1,2,3,。。。
plt.xticks(bar_position, cols[1:]) #设置标签和标题
plt.xlabel("评分公司")
plt.ylabel("评分")
plt.title("5家公司对电影0的评分情况") # 利用plt.text方法,设置具体数值
for x, y in zip(bar_position, bar_height):
plt.text(x, y, '%.2f'% y, ha='center', va='bottom', size=14) # 说明:
# plt.text()依次传入坐标和字符串内容
# x,y 代表传入柱的位置和高度
# '%.2f' 代表传入字符串的内容
# ha='center' 设置文字水平对齐方式,其他参数查看帮助文档
# va='bottom' 设置文字垂直对齐方式,其他参数查看帮助文档
# size 设置字体大小 plt.show()

输出:

横向柱形图

输入:

# plt.barh画横向柱状图

# 设置柱的高度
bar_width = norm_review.loc[0, cols[1:]].values
# 设置柱的位置
bar_position = np.arange(5) + 1 # 设置画板大小
plt.figure(figsize=(10, 6)) # 设置标签和标题
plt.xlabel('评分公司')
plt.ylabel('分数')
plt.title('公司评分分布图') # 设置坐标轴
plt.yticks(bar_position, cols[1:]) # 添加文本注释
for x,y in zip(bar_width, bar_position):
plt.text(x,y, '%.2f'%x, ha='left', va='center', size=14) # 画出柱状图
plt.barh(bar_position, bar_width, 0.5, color=['r', 'g', 'b'])
plt.show()

输出:

4.散点图

一般散点图

输入:

# plt.scatter()画出散点图

# 设置画板大小
plt.figure(figsize=(10, 6)) # 传入每个点的x,y坐标
plt.scatter(norm_review['RT_user_norm'], norm_review['Metacritic_user_nom']) # 设置标签
plt.xlabel('RT_user_norm')
plt.ylabel('Metacritic_user_nom')
plt.title('两家媒体对同一电影的评分') plt.show()

输出:

散点图加子图

输入:

# 散点图加子图

# 新建画板
fig = plt.figure(figsize=(10, 6)) # 添加子图
ax1 = fig.add_subplot(2, 1, 1)
ax2 = fig.add_subplot(2, 1, 2) # 画出子图,并进行设置
ax1.scatter(norm_review['RT_user_norm'], norm_review['Metacritic_user_nom'])
ax1.set_xlabel('RT_user_norm') # 添加标签
ax1.set_ylabel('Metacritic_user_nom') ax2.scatter(norm_review['RT_user_norm'], norm_review['Metacritic_user_nom'],s=10, c='r', marker='^' )
# s=10 设置点的大小
# c='r' 设置颜色
# marker='^' 设置点的类型
ax2.set_xlabel('RT_user_norm') # 添加标签
ax2.set_ylabel('Metacritic_user_nom') plt.show()

输出:

输入:

"""
需求说明:
读取pandas_practice数据
一共两个科目的分数,
通过的用红色 x 表示
淘汰的用蓝色 . 表示
添加图例等相关信息
"""
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt # 数据读取
datas = pd.read_csv(r'D:\codes_jupyter\数据分析_learning\课件\03_matplotlib\pandas_practice.csv', engine='python') # 指定画板大小
fig = plt.figure(figsize=(10,4)) # 取出所有通过的人Exam1分数和Exam2分数,添加标签,指定颜色和点型
plt.scatter(datas['Exam1'][(datas['Admitted'] == 1)], datas['Exam2'][(datas['Admitted'] == 1)], label="通过", s=14, c='r', marker='x')
# 取出所有淘汰的人的分数,添加相关内容
plt.scatter(datas['Exam1'][(datas['Admitted'] == 0)], datas['Exam2'][(datas['Admitted'] == 0)], label="淘汰", s=14, c='b') # 添加标签
plt.xlabel('科目1分数')
plt.ylabel('科目2分数') # 添加图例
plt.legend(loc='best') plt.show()

输出:

5.条形图

数据展示:

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt reviews = pd.read_csv(r'D:\codes_jupyter\数据分析_learning\课件\03_matplotlib\fandango_scores.csv', engine='python')
cols = ['FILM', 'RT_user_norm', 'Metacritic_user_nom', 'IMDB_norm', 'RT_norm', 'Fandango_Stars'] norm_reviews = reviews[cols]
norm_reviews.head()
FILM    RT_user_norm    Metacritic_user_nom    IMDB_norm    RT_norm    Fandango_Stars
0 Avengers: Age of Ultron (2015) 4.3 3.55 3.90 3.70 5.0
1 Cinderella (2015) 4.0 3.75 3.55 4.25 5.0
2 Ant-Man (2015) 4.5 4.05 3.90 4.00 5.0
3 Do You Believe? (2015) 4.2 2.35 2.70 0.90 5.0
4 Hot Tub Time Machine 2 (2015) 1.4 1.70 2.55 0.70 3.5

频数分布图

输入:

# 对某家媒体的评分进行统计,拿到评分的频数分布,并画出频数分布图

# 利用value_counts()函数,对不同评分进行统计,得到频数
# fandango_distribute = norm_reviews['RT_user_norm'].value_counts()
# print(fandango_distribute) # 利用sort_index()函数,按照索引排序
# fandango_sort = fandango_distribute.sort_index()
# print(fandango_sort) # plt.hist()函数画出频数分布图
plt.hist(norm_reviews['RT_user_norm'], bins=20, range=(4, 5), edgecolor='black', rwidth=0.8)
# bins=20 将原来数据的范围分为20份
# edgecolot 设置边框的颜色
# rwidth 设置条形的宽度
# range=(4, 5) 可选参数 设置只显示4到5之间的频数分布 plt.show()

输出:

6.三维图

三维线图

输入:

from mpl_toolkits.mplot3d import Axes3D
import matplotlib.pyplot as plt
import numpy as np # 构造一个3D画板
fig = plt.figure()
ax = Axes3D(fig) x = np.arange(-2, 2, 0.1)
y = np.arange(-2, 2, 0.1)
def f(x, y):
return (x**2 + y**2) # 传入(x,y,z)坐标
ax.plot(x, y, f(x, y), color='r') # 画图 # 设置标签
ax.set_xlabel('x label')
ax.set_ylabel('y label')
ax.set_zlabel('z label') plt.show()

输出:

三维平面图

输入:

# 构造空间图

# 构造一个3D画板
fig = plt.figure()
ax = Axes3D(fig) x = np.arange(-2, 2, 0.1)
y = np.arange(-2, 2, 0.1)
# 将x,y构成点矩阵
x, y = np.meshgrid(x, y) def f(x, y):
return (x**2 + y**2) # 传入(x,y,z)坐标
ax.plot_surface(x, y, f(x, y), color='r') # 画图 # 设置标签
ax.set_xlabel('x label')
ax.set_ylabel('y label')
ax.set_zlabel('z label') plt.show()

输出:

三维散点图

输入:

# 构造一个空间散点图

# 构造一个3D画板
fig = plt.figure()
ax = Axes3D(fig) x = np.arange(-2, 2, 0.1)
y = np.arange(-2, 2, 0.1)
# 将x,y构成点矩阵
x, y = np.meshgrid(x, y) def f(x, y):
return (x**2 + y**2) # 传入(x,y,z)坐标
ax.scatter3D(x, y, f(x, y), color='g', marker='*', s=10) # 画图 # 设置标签
ax.set_xlabel('x label')
ax.set_ylabel('y label')
ax.set_zlabel('z label') plt.show()

输出:

03_Matplotlib的基本使用的更多相关文章

随机推荐

  1. Java多线程编程(二)对象及变量的并发访问

    一.synchronized同步方法 1.方法内的变量为线程安全 “非线程安全”问题存在于“实例变量”中,如果是方法内部的私有变量,则不存在“非线程安全”问题,所得结果也就是“线程安全”的了. 示例: ...

  2. git的使用和常用命令

    git介绍 git 是一个免费开源的分布式版本控制系统 git可以实现各个版本之间的来回穿梭 git可以远程托管代码 git可以完成团队合作 workspace --add--> index - ...

  3. Scrapy 框架入门简介

    一.Scrapy框架简介 Scrapy 是用 Python 实现的一个为了爬取网站数据.提取结构性数据而编写的应用框架. Scrapy 常应用在包括数据挖掘,信息处理或存储历史数据等一系列的程序中. ...

  4. Mac tensorflow mnist实例

    Mac tensorflow mnist实例 前期主要需要安装好tensorflow的环境,Mac 如果只涉及到CPU的版本,推荐使用pip3,傻瓜式安装,一行命令!代码使用python3. 在此附上 ...

  5. 大觅网05Day

    1.Mycat概述 在此前的服务器对数据库的存储数量要求并不高的时候,被经常使用的MySql数据基本能够满足对数据存储的要求. 但随着技术的不断发展,MySql甚至Redis都无法满足现今存储数量的指 ...

  6. python pytesseract使用

    正确使用方法 1.tesseract-orc安装 tesseract-ocr-setup-3.05.00dev.exe下载 2.pytesseract pip install pytesseract ...

  7. ASP.NET Core 3.0 gRPC 拦截器

    目录 ASP.NET Core 3.0 使用gRPC ASP.NET Core 3.0 gRPC 双向流 ASP.NET Core 3.0 gRPC 拦截器 一. 前言 前面两篇文章给大家介绍了使用g ...

  8. mpvue+小程序云开发,纯前端实现婚礼邀请函

    请勿使用本文章及源码作为商业用途! 前言 当初做这个小程序是为了婚礼前的需要,结婚之后,希望这个小程序能够留存下来,特地花了一些空闲时间将小程序转化成为“相册类小程序” 体验码 准备工作 mpvue框 ...

  9. jquery mobiscroll移动端日期选择控件(无乱码)

    jquery mobiscroll移动端日期选择控件(无乱码) <pre><!DOCTYPE html><html lang="en">< ...

  10. Python之tkinter.messagebox弹窗

    messagebox:tkinter的消息框.对话框 一.messagebox.showinfo(title='提示', message='错误') from tkinter import * fro ...