python中的matplotlib

注意:

        这个是作者本人的学习笔记,参考《python机器学习入门》---人民邮电出版社

  1. 基本的介绍

Matplotlib的图像都位于Figure对象中,你可以用plt.figure() 创建一个新的Figure。

调用上述语句会弹出一个空窗口。plt.figure()有一些选项, figsize()是比较重要的一个,它用于确保当图像保存到磁盘时具有一 定的大小和纵横比。Matplotlib的Figure还支持一种MATLAB式的编号 结构,比如plt.figure(2)。通过plt.gcf()方法即可得到当前Figure 的引用。 绘图操作是不能在空Figure上进行的,必须用add_subplot()创建 一个或多个subplot。一般用语句ax1=fig.add_subplot(2,2,1)。 这条代码的意思是,图像应该是2×2的,且当前选中的是4个 subplot中的第一个,subplot的编号从1开始。可以再把后面两个 subplot也创建出来,代码如下。

import matplotlib.pyplot as plt
fig=plt.figure()
ax1=fig.add_subplot(2,2,1)
ax2=fig.add_subplot(2,2,2)
ax3=fig.add_subplot(2,2,3)
#第一张图 进行绘画  第一个参数为x轴,第二个参数为y轴
#第三个参数“k--” 表示线性模型,“--”表示虚线
ax1.plot([2.0,4.0,8.0,10.0],[1.0,3.0,2.0,6.0],"k--")
plt.show()

如果我们什么sub_plot都不添加,那么就只会有一个图像,如下图所示

所以说,sub_plot(a,b,c) 中的三个参数表示x,y的图像数目,c表示这是第几张图

--------------------------------------------------------------------------------------

当然,我们可以使用下面一种更加方便的方式去创建图像,我们也可以得到相同的结果(^_^)

import matplotlib.pyplot as plt
fig,axes=plt.subplots(1,1)
axes.plot([2.0,4.0,8.0,10.0],[1.0,3.0,2.0,6.0],"r--")
#注意!!! "r--",也可以用color="red",linestyle="--"来代替
#-表示实线, --表示虚线,-. 表示点横线,:表示点线
plt.show()

标记:

我们也可以使用marker参数来构建标记点,会将我们传入的点进行标记,marker的值可以为"." "o" "v" "^" ">" "<" "p" "x" "*"

import matplotlib.pyplot as plt
fig,axes=plt.subplots(1,1)
axes.plot([2.0,4.0,8.0,10.0],
[1.0,3.0,2.0,6.0],color="red",linestyle="--",marker="x")
plt.show()

x刻度:

代码中使用set_xticks()方法设置数据显示刻度,在参数列表中 的[0,5,10]的位置上显示刻度,再利用set_xticklabels()设定刻度的 标记显示。参数列表中的["zero","five","ten"]分别对应刻度位置

import matplotlib.pyplot as plt
fig,axes=plt.subplots(1,1)
axes.plot([2.0,4.0,8.0,10.0],
[1.0,3.0,2.0,6.0],color="red",linestyle="--",marker="x")
axes.set_xticks([0,5,10])
axes.set_xticklabels(["zero","five","ten"])
plt.show()

标题:

可以用set_xlabel()为x轴 设置名称,并用set_title()设置一个标题,代码如下。不过如果是下面这样的话,并不能够使用中文。

import matplotlib.pyplot as plt
fig,axes=plt.subplots(1,1)
axes.plot([2.0,4.0,8.0,10.0],
[1.0,3.0,2.0,6.0],color="red",linestyle="--",marker="x")
axes.set_xticks([0,5,10])
axes.set_xticklabels(["zero","five","ten"])
axes.set_xlabel("horizontal coordinates")
axes.set_title("horizontal and vertial point show")
plt.show()

字体:

从结果上看,在x轴下方有一个“horizontal coordinates”的说 明,在图像上方有一个“horizontal and vertial point show”的说 明,只不过显示的是英文。Matplotlib如果要显示中文,需要设置相 关的字体。在Matplotlib中有一个reParams模块,这里调用 font_manager模块将默认的字体设置为宋体,代码如下

import matplotlib.pyplot as plt
from matplotlib import rcParams
# 设置默认字体为宋体
rcParams['font.family'] = 'SimSun'
rcParams['font.sans-serif'] = ['SimSun']

fig,axes=plt.subplots(1,1)
axes.plot([2.0,4.0,8.0,10.0],
[1.0,3.0,2.0,6.0],color="red",linestyle="--",marker="x")
axes.set_xticks([0,5,10])
axes.set_xticklabels(["zero","five","ten"])
axes.set_xlabel("一条x轴")
axes.set_title("一个图像示例")
plt.show()

如果只更改局部字体的话,可以用下面的方式

import matplotlib.pyplot as plt
from matplotlib import font_manager

# 注册字体(如果你的系统中没有自动找到宋体,可能需要指定字体路径)
# 例如宋体可能在Windows系统中的路径是 'C:\Windows\Fonts\simsun.ttc'
# 你可以使用font_manager来找到字体的路径
font_path = font_manager.findfont('SimSun')  # 'SimSun'是宋体的字体名称

# 创建图形和坐标轴
fig, axes = plt.subplots(1, 1)

# 绘制折线图
axes.plot([2.0, 4.0, 8.0, 10.0], [1.0, 3.0, 2.0, 6.0], color="red", linestyle="--", marker="x")

# 设置x轴刻度和标签
axes.set_xticks([0, 5, 10])
axes.set_xticklabels(["零", "伍", "拾"], fontproperties=font_manager.FontProperties(fname=font_path))

# 设置x轴标签和图表标题
axes.set_xlabel("横向坐标的显示", fontproperties=font_manager.FontProperties(fname=font_path))
axes.set_title("横纵坐标点的显示", fontproperties=font_manager.FontProperties(fname=font_path))

# 显示图形
plt.show()

图例:

图例(legend)是另一种用于标识图表元素的重要工具。添加图 例的操作有两步。首先是在添加subplot的时候传入label参数,再调 用axes.legend()或plt.legend()来创建图例。可以携带loc参数告诉 Matplotlib要将图例放在哪里,参数的“best”值是不错的选择,因 为它会选择“最不碍事”的位置,代码如下。

import matplotlib.pyplot as plt
from matplotlib import rcParams
# 设置默认字体为宋体
rcParams['font.family'] = 'SimSun'
rcParams['font.sans-serif'] = ['SimSun']
fig,axes=plt.subplots(1,1)
#申明第一第二条线
axes.plot([2.0,4.0,8.0,10.0],
[1.0,3.0,2.0,6.0],color="red",linestyle="--",marker="x",label="第一条线")
axes.plot([1.0,3.0,4.0,7.0],
[1.0,3.0,4.0,5.0],color="blue",linestyle="-.",marker="v",label="第二条线")
#设置图的名称
axes.set_title("一张简单的图")
#设置x轴
axes.set_xticks([0,5,10])
#设置x轴的标签
axes.set_xlabel("这个是x轴")
#放置label的位置在最佳处
axes.legend(loc="best")
plt.show()

注释:

前两个参数是x,y的坐标,第三个参数是内容

plt.text(0.5,1.5,"(1.0,1.0)",fontsize=10)

保存:

利用plt.savefig()可以将当前图表保存到文件。该方法相当于 Figure对象的实例方法savefig(),传入的参数就是一个文件名。文件 类型是通过文件扩展名推断出来的。如果使用“.pdf”作为扩展名, 就会得到一个PDF文件。一般常用到两个重要的参数是dpi和 bbox_inches,其中dpi表示控制“每英寸点数”分辨率,bbox_inches 可以用于剪除当前图表周围的空白部分,代码如下

import matplotlib.pyplot as plt
from matplotlib import rcParams
# 设置默认字体为宋体
rcParams['font.family'] = 'SimSun'
rcParams['font.sans-serif'] = ['SimSun']
fig,axes=plt.subplots(1,1)
axes.plot([2.0,4.0,8.0,10.0],
[1.0,3.0,2.0,6.0],color="red",linestyle="--",marker="x",label="第一条线")
plt.savefig("result.png",dpi=400,bbox_inches="tight")
plt.show()

  1. 线形图
import matplotlib.pyplot as plt
import numpy as np
x=np.linspace(0,10,100)
sin_y=np.sin(x)
plt.plot(x,sin_y)
cos_y=np.cos(x)
plt.plot(x,cos_y)
plt.show()

使用我们之前最熟悉的格式,也可以做到,注意RGB颜色和numpy的运用

import matplotlib.pyplot as plt
import numpy as np
from matplotlib import rcParams
# 设置默认字体为宋体
rcParams['font.family'] = 'SimSun'
rcParams['font.sans-serif'] = ['SimSun']
fig,axes=plt.subplots(1,1)
x=np.arange(0,2*np.pi,0.1)
y=np.sin(x)
#使用RGB颜色
axes.plot(x, y, color=(112/255, 154/255, 211/255))  
plt.show()
import matplotlib.pyplot as plt
import numpy as np
from matplotlib import rcParams
# 设置默认字体为宋体
rcParams['font.family'] = 'SimSun'
rcParams['font.sans-serif'] = ['SimSun']
fig,axes=plt.subplots(1,1)
x=np.arange(0,2*np.pi,0.1)
y1=np.sin(x)
y2=np.sin(x)-np.array([np.pi/2])
#使用RGB颜色
axes.plot(x, y1, color=(112/255, 154/255, 211/255),label="蓝色的线")  
axes.plot(x,y2,color="green",label="绿色的线")
axes.set_xlabel("x轴")
axes.set_title("标题")
axes.legend(loc="best")
plt.show()

3.饼图

import matplotlib.pyplot as plt
from matplotlib import rcParams

# 设置默认字体为宋体
rcParams['font.family'] = 'SimSun'
rcParams['font.sans-serif'] = ['SimSun']
rcParams['axes.unicode_minus'] = False  # 用来正常显示负号

# 定义标签和大小
label = ["宠物猫", "宠物狗", "宠物鼠", "宠物鸟"]
sizes = [20, 16, 5, 6]
explode = [0.02, 0, 0, 0]

# 创建图形和坐标轴
fig, axes = plt.subplots(1, 1)

# 定义浅色的颜色列表
light_colors = ['#FFCCCC', '#FFEBCD', '#FFEFD5', '#FFF5EE']  # 浅红色、浅粉色、浅黄色、浅米色
axes.set_facecolor('#F8F8FF')  # 背景颜色设置为浅蓝色
fig.set_facecolor('#F8F8FF')
# 绘制饼图,设置颜色和背景颜色
axes.pie(sizes, explode=explode, labels=label, autopct='%1.2f', colors=light_colors)

# 显示图形
plt.show()

,explode指的是饼图中每部 分从圆中外移的偏移量。通过pie()方法可以绘制饼图,传入参数 explode表示用来指定每部分从圆中外移的偏移量,labels表示每个饼 块的标记,autopct表示自动标注百分比,并设置字符串格式, “%1.2f%%”表示格式化输出浮点数,小数点后2位。参数部分除了代 码中的参数外,也可以使用colors绘制每个饼块的颜色,shadow来决 定是否添加阴影,radius决定饼图的半径,这些参数有兴趣的读者可 自行添加。代码最后使用set_title()设置图表的标题,代码运行的结 果如图所示

  1. 直方图
import matplotlib.pyplot as plt
from matplotlib import rcParams

# 设置默认字体为宋体
rcParams['font.family'] = 'SimSun'
rcParams['font.sans-serif'] = ['SimSun']
rcParams['axes.unicode_minus'] = False  # 用来正常显示负号
data=[1200,310,520,800,280,1500,900]
fig,axes=plt.subplots(1,1)
fig.set_facecolor("#F8F8FF")
axes.set_facecolor("#F8F8FF")
axes.hist(data,bins=7,facecolor="#d6e0c8",edgecolor="#EECA40",alpha=0.7)
# 显示图形
plt.show()

代码中hist()表示的是绘制直方图,第一个参数data中保存的是 绘图的数据,数据是产品的销售量;bins表示直方图的条形数目,如 果数目过多,显示条目可以少于数目;facecolor表示直方图条形的颜 色;edgecolor表示直方图条形边缘的颜色;alpha表示透明度。

  1. 条形图
import matplotlib.pyplot as plt
from matplotlib import rcParams

# 设置默认字体为宋体
rcParams['font.family'] = 'SimSun'
rcParams['font.sans-serif'] = ['SimSun']
rcParams['axes.unicode_minus'] = False  # 用来正常显示负号
drinks=["牛奶","咖啡","茶","可乐","橙汁","雪碧","矿泉水"]
eleders=[10,30,70,4,15,10,60]
younger=[40,30,40,30,30,20,10]
# 显示图形
fig,axes=plt.subplots(1,1)
axes.bar(drinks,eleders,width=0.5,color="#cac8ef",alpha=1,label="老年人")
axes.bar(drinks,younger,width=0.5,color="#98dcfc",alpha=0.5,label="年轻人")
axes.set_title("饮料选择")
axes.legend(loc="best")
plt.show()

当然,可以使用下面的方式进行偏移

import matplotlib.pyplot as plt
from matplotlib import rcParams

# 设置默认字体为宋体
rcParams['font.family'] = 'SimSun'
rcParams['font.sans-serif'] = ['SimSun']
rcParams['axes.unicode_minus'] = False  # 用来正常显示负号

drinks = ["牛奶", "咖啡", "茶", "可乐", "橙汁", "雪碧", "矿泉水"]
elders = [10, 30, 70, 4, 15, 10, 60]
younger = [40, 30, 40, 30, 30, 20, 10]

# 计算条形的中心位置
positions = range(len(drinks))

# 显示图形
fig, axes = plt.subplots(1, 1)

# 绘制老年人的条形图
axes.bar([p - 0.25 for p in positions], elders, width=0.4, color="#cac8ef", alpha=1, label="老年人")
axes.plot(drinks,elders,color="#cac8ef")
# 绘制年轻人的条形图,位置稍微偏移
axes.bar([p + 0.25 for p in positions], younger, width=0.4, color="#98dcfc", alpha=0.5, label="年轻人")
axes.plot(drinks,younger,color="#98dcfc")
axes.set_title("饮料选择")
axes.legend(loc="best")
plt.show()

  1. 散点图
import matplotlib.pyplot as plt
from matplotlib import rcParams

# 设置默认字体为宋体
rcParams['font.family'] = 'SimSun'
rcParams['font.sans-serif'] = ['SimSun']
rcParams['axes.unicode_minus'] = False  # 用来正常显示负号

drinks = ["牛奶", "咖啡", "茶", "可乐", "橙汁", "雪碧", "矿泉水"]
elders = [10, 30, 70, 4, 15, 10, 60]
younger = [40, 30, 40, 30, 30, 20, 10]

# 计算条形的中心位置
positions = range(len(drinks))

# 显示图形
fig, axes = plt.subplots(1, 1)

# 绘制老年人的条形图
axes.scatter(drinks,elders,color="#cac8ef", alpha=1, label="老年人")
# 绘制年轻人的条形图,位置稍微偏移
axes.scatter(drinks, younger,color="#98dcfc", alpha=0.5, label="年轻人")
axes.plot(drinks,elders,color="#cac8ef")

axes.plot(drinks,younger,color="#98dcfc")
axes.set_title("饮料选择")
axes.legend(loc="best")
plt.show()

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值