plt6种基本图形及基础

本文详细介绍了matplotlib库在Python中绘制6种基本图形的方法,包括散点图、折线图、条形图、直方图、饼状图和箱型图。通过示例展示了每种图形的参数设置,如颜色、样式、坐标轴范围调整、网格和图例的绘制,以及在一张图上绘制多个子图等。同时,文章也提到了面向对象和Matlab风格的编程方式在matplotlib中的应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在这里插入图片描述

np的创建

在这里插入图片描述

np的切片
在这里插入图片描述
np调用函数
在这里插入图片描述

6中基本图形的画法:

散点图scatter(),4个参数,分别是c 点的形状,s点的大小,alpha透明度,marker点形状
散点图显示2组数据的值,每个点坐标位置由变量的值决定
由一组不连接的电玩城,用具观察两种变相的相关性
例如:身高-体重,温度-纬度等
在这里插入图片描述
散点图最大的作用就是研究两个变量的相关性
相关性一般来说有三种:正相关,负相关和不相关

这里两个变量,每个变量都是1000个随机数,看他们的相关性,可以看到,这个图形没有一个明显的趋势,所以可以判断x和y没有相关性
在这里插入图片描述
这里x取1000个随机数,y取x有关的值,可以明显的发现是正相关
在这里插入图片描述

折线图(3个参数,1.线型:linestyle,2.颜色:color,3.点形状:marker)
折线图是用直线段将各数据连接起来组成的图形
常用来观察数据随时间变化的趋势
例如股票价格,温度变化等
下面的例子,x从-10到10取均分取5个数字,y取x的平方,绘制出5个点的折线图
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

条形图(plt.bar(),2个参数:1.color:颜色,2.width:宽度):
在这里插入图片描述
如果想绘制水平的条形图,可以在plt.bar中增加参数orientation = “horizontal”
在这里插入图片描述
为了简化参数,还提供了另外一种函数
plt.barh

北京和伤害某商品的销量条形图,可以用作对比
这种对比图或者层叠图的核心就是第二个变量的横坐标或者纵坐标,用横坐标+宽度或者bottem=第一个变量的高度在这里插入图片描述
直方图(hist,3个参数,1:bins直方图中总共有多少个直方,color颜色,normed,布尔型变量,是否对数据标准化):
有一系列高度不等的纵向条形组成,表示数据的分布
例如某年级同学的身高分布情况
注意和条形图的区别(直方图通常用来连续性数值型数据,分组是用连续型的方式分组,并且可以自定义;条形图通常用来展示不同类别的数据,而且这个类别通常不能自定义和不连续)
在这里插入图片描述

双变量的直方图:
用颜色深浅代表频率的大小
可以看到,x中间点对应的是2,y中间点对应的是3,越在中心越量,探索双变量的联合分布
在这里插入图片描述
饼状图(pie):
饼状图显示一个数据系列中各项的大小与各项综合的比例
饼状图的数据点显示为整个饼状图的百分比
比如前十大品牌占市场份额图
在这里插入图片描述
如果想把某一块突出显示,需要用到explode,它会让这部分离开圆心
在这里插入图片描述

箱型图
箱型图(Box-plot)又称为盒须图,盒式图或者箱线图
是一种用作显示一组市局分散情况资料的统计图
上边缘,上四分位数,中位数,下四分位数,下边缘,异常值
在这里插入图片描述

颜色和样式

8种内建颜色缩写:
b:bule
g:green
r:red
c:cyan
m:magenta
y:yellow
k:black
w:white
其他颜色表示方法
1.灰色阴影
2.html 十六进制
3.RGB元组
测试三种方法:
在这里插入图片描述
点和线的样式:
点的形状:23种
我们可以看到,不写marker就不会连线,写了就会自动连线,并且每个点形状不同,颜色就会自动变化
在这里插入图片描述
线的形状:4种
在这里插入图片描述
样式字符串:
可以将颜色,点形,线型写成一个字符串
比如:cx-- mo:
在这里插入图片描述

编程方式:面向对象VS Matlab Style

pyolot:经典高层封装
ptlab:将Matplotlib和Numpy合并的模块,模拟Matlab的编程环境
面向对象的方式:Matplotlib的精髓,更基础和底层方式

pyplot:简单易用,交互使用时方便,可以根据命令实时作图,但是底层定制能力不足
pylab:完全封装,环境最接近Matlab,不推荐使用
面向对象方式:接近Malplotlib基础和底层的方式,难度稍大,但是定制能力强,而且是Matplotlib的精髓
实战中推荐,根据需求,综合使用pyplot和OO的方式,显示导入numpy

在一张图上画多个子图

Matplotlib对象简介
大的对象有三级,FigureCanvas:画布,Figure:图,Axes:Figure上的坐标轴
如何在一张图上画子图:
fig = plt.figure()
Figure实例,可以添加Axes实例
ax = fig.add_subplot(111)
返回Axes实例
3个1分别代表:
参数1:子图总行数
参数2:子图总列数
参数3:子图的位置
在这里插入图片描述
可以看到我们画子图在第一行第一列,现在如果我们想在第一行第二列上画子图:
在这里插入图片描述

如何生成多张图

生成多张图是因为用了多个figure对象,生成子图用的是ax
在这里插入图片描述

网格的画法:

画网格有2种方式,1.用plt直接封装好的网格函数,2.用面向对象的方式
先画一张普通的图
在这里插入图片描述
那么如何生成网格呢:
写入代码plt.grid(True)
在这里插入图片描述
我们也可以对网格进行更多更复杂的定制:
在这里插入图片描述
用面向对象的方式绘制网格:
需要注意的是,面向对象是没有交互效果的
在这里插入图片描述

图例的画法

在这里插入图片描述
同样有2种方式可以生成图例,一种是plt方式,一种是面向对象的方式
这是原图,没有图例
在这里插入图片描述
如何添加图例呢:
写入代码plt.legend()
在这里插入图片描述
legend有两个重要的参数,1:位置:loc=1 loc = 2,loc= 3,loc = 4。。。。,2.扁平化:ncol(有几列),ncol = 1#有1列
ncol = 2#有2列
用plt也可以把label卸载legend里面:注意,legend里面是一个列表
在这里插入图片描述

面向对象的方式
在这里插入图片描述

坐标轴范围调整

在这里插入图片描述
比如这想绘制这张图,我们想把坐标轴范围调整到:横坐标0,10,纵坐标0,80
使用函数asix()
在这里插入图片描述

调整坐标轴的刻度

在这里插入图片描述
如果我们想把坐标轴密度改变,比如1.5 , 2.5
在这里插入图片描述
plt.gca()是获取当前的坐标轴
当对象是坐标轴的时候,使用函数locator_params(),这时候参数可以指定,比如locator_params(“y”,nbins = 20),nbins是指定某个坐标分为多少格
有的时候,横坐标会是日期,日期相对来说麻烦一点:
在这里插入图片描述

添加坐标轴

在这里插入图片描述
像这种区间不一样的图,就需要双坐标轴
plt.twinx()就是生成第二个坐标轴,但是坐标轴默认范围是0-1

plt方式
在这里插入图片描述在这里插入图片描述
面向对象方式:
在这里插入图片描述

<think>我们正在讨论如何保存Matplotlib绘制的图形。根据引用[1],我们知道Matplotlib提供了将图形保存为图像文件的功能,而不是仅仅使用plt.show()显示出来。引用[1]中提到的基本保存方法是关键。保存图形基本步骤:1.在绘制图形之后,调用`plt.savefig()`函数,并指定文件名(可以包含路径)。2.可以通过参数设置图像格式(如png,jpg,svg,pdf等)和分辨率(dpi)等。具体操作如下:-首先,确保已经导入了matplotlib.pyplot模块,通常我们这样导入:`importmatplotlib.pyplotasplt`。-然后,创建图形并绘制(例如使用plt.plot()等)。-最后,在调用plt.show()之前,调用plt.savefig()保存图像。因为plt.show()会清空图形,所以通常先保存再显示。示例代码:```pythonimportmatplotlib.pyplotasplt#创建数据并绘图x=[1,2,3,4]y=[1,4,9,16]plt.plot(x,y)#保存图像到当前目录,文件名为'my_plot.png'plt.savefig('my_plot.png')#显示图形(可选)plt.show()```此外,plt.savefig()还支持多个参数来调整输出:-`dpi`:设置图像分辨率(每英寸点数),例如dpi=300。-`bbox_inches`:设置为'tight'可以去除图像周围多余的空白。-`format`:指定保存的格式,如'png','jpg','svg','pdf'等。如果不指定,则根据文件扩展名自动判断。示例:保存为高分辨率PDF并去除空白```pythonplt.savefig('my_plot.pdf',dpi=300,bbox_inches='tight')```注意:如果同时需要显示和保存,务必先保存再显示,因为plt.show()会释放图形资源。另外,引用[4]中展示了一个例子,其中使用了`plt.figure(figsize=(8,9))`来设置画布大小,然后绘制了两个子图,并分别保存(但实际上该例子并没有保存,而是显示)。我们可以将保存步骤加在plt.show()之前。对于3D图像(引用[5]),保存方法是一样的,使用plt.savefig()。总结:保存Matplotlib图形的核心函数是`plt.savefig()`,在绘制完成后调用该函数并指定文件名即可。相关问题:1.如何保存Matplotlib图形而不显示?2.如何将Matplotlib图形保存为不同格式(如PNG、PDF、SVG)?3.如何调整保存图像的分辨率和大小?4.如何去除保存图像周围的空白区域?5.如何同时保存多个图形到不同的文件?</think>### 如何保存 Matplotlib 绘制的图像 在 Matplotlib 中保存图像的核心方法是使用 `savefig()` 函数,以下是详细操作指南: #### 一、基础保存方法 ```python import matplotlib.pyplot as plt # 1. 创建图形 plt.plot([1, 2, 3], [1, 4, 9]) plt.title("示例图像") # 2. 保存图像(默认PNG格式) plt.savefig('output.png') # 保存到当前目录 # 3. 显示与保存顺序(重要!) plt.show() # 必须在保存后调用 ``` **关键点**: - `savefig()` 必须在 `show()` 之前调用,否则会保存空白图像 - 默认保存为 PNG 格式,分辨率 100 DPI[^1] #### 二、高级保存选项 ```python plt.savefig( 'high_quality_plot.pdf', # 文件名 dpi=300, # 分辨率(印刷推荐300+) bbox_inches='tight', # 去除多余白边 facecolor='white', # 背景色 edgecolor='none', # 边框颜色 format='svg' # 指定矢量格式 ) ``` **参数说明**: | 参数 | 说明 | 常用值 | |------|------|--------| | `dpi` | 分辨率 | 72(屏幕), 300(印刷) | | `bbox_inches` | 边界框 | 'tight'(自动紧凑) | | `format` | 文件格式 | 'png','pdf','svg','jpg' | | `transparent` | 透明背景 | True/False | #### 三、多子图保存技巧 ```python fig, axs = plt.subplots(2, 2) # 创建2x2子图 # ... 在各子图绘制数据 ... # 保存整个画布 fig.savefig('all_subplots.png', dpi=150) # 使用Figure对象保存 # 保存单个子图 axs[0,0].figure.savefig('single_subplot.jpg') # 通过Axes对象保存 ``` #### 四、3D图像保存 ```python from mpl_toolkits.mplot3d import Axes3D fig = plt.figure() ax = fig.add_subplot(111, projection='3d') # ... 绘制3D图形 ... fig.savefig('3d_plot.png', dpi=200) # 保存方法与2D相同[^5] ``` #### 五、批量保存技巧 ```python formats = ['png', 'pdf', 'svg'] for fmt in formats: plt.savefig(f'output.{fmt}', format=fmt) # 同时保存多格式 ``` ### 常见问题解决 1. **图像空白问题** - 确保 `savefig()` 在 `show()` 前调用 - 使用 `plt.close()` 释放资源 2. **中文乱码问题** 添加字体配置: ```python plt.rcParams['font.sans-serif'] = ['SimHei'] # 中文字体[^4] plt.rcParams['axes.unicode_minus'] = False # 负号显示 ``` 3. **矢量图编辑** 推荐使用 SVG 格式: ```python plt.savefig('vector_graph.svg', format='svg') # 可用Inkscape编辑 ``` ### 最佳实践建议 1. 印刷用途:PDF格式 + 300 DPI 2. 网页使用:PNG格式 + 72-150 DPI 3. 学术论文:同时保存PDF(矢量)和PNG(预览) 4. 动态调整大小: ```python plt.savefig('responsive.png', dpi=300, bbox_inches='tight') # 自动适应内容 ``` > **重要提示**:使用 `bbox_inches='tight'` 可解决90%的边界留白问题[^1],对于包含图例的复杂图形尤其有效。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值