matplotlib画简单的论文图像

本文详细介绍了如何在Python中使用matplotlib库创建折线图和柱状图,包括基本绘图、多曲线对比、颜色和标识设置,以及如何调整x轴和y轴标签。通过实例演示了如何处理柱状图的间隔和标签显示,使图表更易于理解和阅读。

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

由于最近论文里需要插入绘图,因此写一篇博客记录一下

折曲线图

基本绘图

在matplotlib中折线和曲线图是最常用和最简单的图。只需要直接使用方法plot即可。

import matplotlib.pyplot as plt
plt.plot(x,y)
plt.show()

其中上述的代码中x,y分别是横坐标和纵坐标的值。作用是根据x,y提供的坐标描点,最后连线从而形成一条曲线。
同时如果只想要直接描点而不希望连线,可以在后面添加参数’o’表示直接描点而无需连线。例如以下代码

import matplotlib.pyplot as plt
plt.plot([i for i in range(0,100,10)],[i for i in range(0,100,10)],'o')
plt.show()

结果为
在这里插入图片描述

多条曲线绘图

在论文中经常会进行多个方法对比,此时会将多个方法结果放入一个图像中,同时通过对曲线使用不同标识标记,例如这种图像
在这里插入图片描述
绘制多种图像的方法和上述画一条曲线相同,通过对方法plot的多次调用,即可实现将多条曲线放入画布中。
这里的注意点是绘制多条曲线是通常需要对多条曲线使用不同标识标记。这里需要的主要是三个参数。分别是colormarkerlabel分别表示的是线段的颜色、标识(就是上面线段中每隔一段的图形)、线段标签。线段标签作用是可以使用方法legend在指定位置说明线段标签,以方便读者区分。例如以下代码

import matplotlib.pyplot as plt
plt.plot([i for i in range(10)],[2*i for i in range(10)],color='blue',marker='*',label='a')#添加第一个曲线
plt.plot([i for i in range(10)],[i for i in range(10)],color='orange',marker='>',label='b')#第二个曲线
plt.legend(loc='lower left')		#添加线段标签说明
plt.show()#显示图像

结果为
在这里插入图片描述
在方法legend中参数表示的是线段说明的位置,本代码中为‘lower left’就是左下位置,right就是右边,upper为上使用这四个参数可以将标签放在任意4个角。对于plot方法的参数marker,其值对应的图像可以参考这篇博客

以上就是主要的曲线绘图,接下来就是柱状图。

绘制柱状图

基本柱状图

基本柱状图和曲线图类似,但是调用方法名不同,而且参数设置上由于柱状图有厚度,因此一般会添加厚度设置(可以不设置,有默认值)。
例如以下代码

import matplotlib.pyplot as plt
plt.bar([i for i in range(5)],[2*i+1 for i in range(5)],0.9)
plt.show()

效果为
在这里插入图片描述
在方法bar中参数分别是x轴位置,该位置高度,该柱体的宽度。

柱体标签设置

有的时候我们希望在x下面显示该柱体对应的内容,而不只是数字,此时我们可以使用方法set_xticklabels
例如以下代码

import matplotlib.pyplot as plt

p=plt.subplot()
x=[i for i in range(5)]#x轴
y=[2*i+1 for i in range(5)]#y轴
show=['aaaa','bbbb','cccc','dddd','eeeee']#希望x轴显示的内容
p.bar(x,y,0.9)
p.set_xticks(x)   #获取位置
p.set_xticklabels(show)		#显示内容
plt.show()

效果为
在这里插入图片描述
这里的柱体不多,如果出现柱题较多的情况可以通过添加参数rotation使文字竖着显示

import matplotlib.pyplot as plt

p=plt.subplot()    #创建一个图
x=[i for i in range(5)]#x轴
y=[2*i+1 for i in range(5)]#y轴
show=['aaaa','bbbb','cccc','dddd','eeeee']#希望x轴显示的内容
p.bar(x,y,0.9)
p.set_xticks(x)   #获取位置
p.set_xticklabels(show,rotation='vertical')		#显示内容
plt.show()

效果为
在这里插入图片描述

如果希望可以在柱体上面显示对应的值,可以使用方法text(x,y,text)该方法主要有三个参数分别是x轴坐标,y轴坐标和显示的内容。作用的将需要显示的内容在指定坐标显示

多柱柱状图

多柱柱状图和上面的思路相同,不过这里需要注意的是如果是为了对比,例如对比两年每月份的销售额,虽然在实际上x轴相同但是表现在图上时,还是需要x轴有差异,因为如果x轴相同会导致一些图形覆盖。例如以下代码

import matplotlib.pyplot as plt
import random
y1=[random.randint(0,100) for i in range(10)]  #随机生成第一个
y2=[random.randint(0,100) for i in range(10)]	#随机生成第二个
x=[i for i in range(10)]#x轴位置
p=plt.subplot()
p.bar(x,y1,color='orange')
p.bar(x,y2,color='blue')
plt.show()

效果是
在这里插入图片描述
可以看到有些柱体被覆盖无法看到,因此有多有柱体时,需要根据上一个柱体的x位置和柱体宽度设置下一个柱体的位置
例如将上述代码修改为

import matplotlib.pyplot as plt
import random
y1=[random.randint(0,100) for i in range(10)]
y2=[random.randint(0,100) for i in range(10)]
x=[i for i in range(10)]
x2=[i+0.3 for i in x]    #第一个柱体x位置=前一个柱体位置+前一个柱体厚度
p=plt.subplot()
p.bar(x,y1,0.3,color='orange')
p.bar(x2,y2,0.3,color='blue')
plt.show()

效果为
在这里插入图片描述
这里将宽度和x轴设置好后柱体不在重叠。

x轴y轴标签

x,y轴标签也是图表中重要的一部分,对于读者理解内容有较大重要作用。
设置方法较为简单,通过方法xlabel 、ylabel分别用来设置x轴y轴标签名
例如以下代码

import matplotlib.pyplot as plt
plt.plot([i for i in range(10)],[2*i for i in range(10)],color='blue',marker='*',label='a')
plt.xlabel('xlabel')
plt.ylabel('ylabel')
plt.show()

效果为
在这里插入图片描述

使间隔不均匀的柱图间隔均匀

在画一个图片时,遇到一个问题就是需要一个柱状图,但是每个柱体间隔不同,而且不均匀,为了美观需要将柱体间隔均匀方便阅读。这里的思路主要是通过对x值修改。将传入bar方法的x设置为均匀的而不是实际值,再通过方法p.set_xticklabels(show,rotation='vertical')将实际值作为显示的内容,可以使得柱体间隔均匀美观。
这里使用举例数据为例(实际上遇到的问题,但是不是我遇到问题时的数据)

import matplotlib.pyplot as plt
x=[2,3,4,5,9,13,19,30,31,40,44,45]
y=[4,7,9,2,4,5,7,10,4,2,7,9]
plt.bar(x,y)
plt.show()

这里结果是
在这里插入图片描述

可以发现结果非常混乱。此时可以用上面的思路。重新写下代码

import matplotlib.pyplot as plt
import numpy as np
x=[2,3,4,5,9,13,19,30,31,40,44,45]
y=[4,7,9,2,4,5,7,10,4,2,7,9]
p=plt.subplot()
sp = np.linspace(0, 60, len(x))     #定义传入的x间隔
p.bar(sp, y, width=2, color='orange', label='SDM')
p.set_xticks(sp)
p.set_xticklabels(x)				#定义x显示的数字
plt.show()

结果为
改良后的绘图
从图片上可以看到,每个柱体间隔都是均匀的。同时x轴显示的数字是实际数据的数字

<think>好的,我现在需要帮助用户了解如何在使用matplotlib图后保存图像。首先,我得确认自己对这个过程的理解是否正确。用户可能已经好了图,但不知道如何保存到本地文件。 我应该从最基础的方法开始,也就是使用plt.savefig()函数。这是最常用的方法,用户可能需要知道基本用法,比如指定文件名和格式。记得提到支持的格式,比如PNG、PDF、SVG等,这对用户选择输出格式有帮助。 然后,用户可能需要调整图像的分辨率,这时候需要介绍dpi参数。比如设置dpi=300可以提高图片质量,适合印刷或高清显示。但也要提醒用户,过高的dpi会导致文件变大,需要权衡。 接下来,用户可能想控制图片的尺寸,这时候需要解释figsize参数。通常以英寸为单位,比如设置(8,6)这样的宽高比。同时,保存的时候可能会遇到图像显示不全的问题,所以需要提到调整布局,使用bbox_inches='tight'和pad_inches参数,这样可以自动裁剪多余的空白区域。 还有,用户可能需要透明背景的图片,尤其是用于论文或网页的时候。这时候需要提到transparent=True参数,并举例说明适用的情况,比如PNG格式支持透明背景。 另外,用户可能想同时保存为多种格式,这时候需要展示如何在一个循环中遍历格式列表,多次调用savefig,这样可以避免重复代码。 最后,用户可能在使用Jupyter Notebook时遇到问题,比如图像没有保存或者覆盖的问题。这时候需要提醒他们在保存后调用plt.close(),或者先保存再显示,避免因为图像还未生成就被关闭的情况。 总结一下,我应该分步骤介绍不同的保存方法,每个步骤给出示例代码,并解释各个参数的作用和适用场景。确保语言简洁明了,让用户能够轻松跟随操作。同时,注意中文表达,避免专业术语过于晦涩,必要时给出注意事项,帮助用户避免常见错误。</think>在 Pythonmatplotlib 中保存图形非常简单,以下是几种常见方法及详细说明: --- ### **1. 基础保存方法** 使用 `plt.savefig()` 函数保存当前图形: ```python import matplotlib.pyplot as plt plt.plot([1, 2, 3], [4, 5, 1]) plt.savefig("my_plot.png") # 保存为 PNG 格式 ``` - **支持格式**:自动根据扩展名识别格式,如 `.png`, `.pdf`, `.svg`, `.jpg` 等 - **默认路径**:保存在当前工作目录,可指定绝对路径如 `"/home/user/plot.png"` --- ### **2. 调整分辨率** 通过 `dpi` 参数控制图像质量: ```python plt.savefig("high_quality_plot.png", dpi=300) # 高分辨率保存 ``` - **适用场景**:论文插图需要 300dpi 以上分辨率 - **注意**:dpi 越高文件越大 --- ### **3. 控制图片尺寸** 通过 `figsize` 和 `bbox_inches` 调整尺寸和边距: ```python plt.figure(figsize=(8, 6)) # 8英寸宽,6英寸高 plt.plot(x, y) plt.savefig("custom_size_plot.png", bbox_inches='tight', # 自动裁剪空白区域 pad_inches=0.1) # 保留0.1英寸边距 ``` --- ### **4. 透明背景** 添加 `transparent=True` 参数: ```python plt.savefig("transparent_plot.png", transparent=True) ``` - **适用场景**:需要将图片叠加在其他背景上时(如网页/PPT) - **支持格式**:PNG、PDF、SVG 等支持透明度 --- ### **5. 多格式保存** 批量保存为不同格式: ```python formats = ['png', 'pdf', 'svg'] for fmt in formats: plt.savefig(f"plot.{fmt}") ``` --- ### **注意事项** 1. **保存顺序**:应在 `plt.show()` 前调用 `savefig()`,否则会保存空白图像 2. **关闭图像**:保存后建议添加 `plt.close()` 释放内存 3. **指定布**:如果有多个 Figure 对象,需明确指定: ```python fig, ax = plt.subplots() ax.plot(x, y) fig.savefig("specific_figure.png") ``` --- 通过上述方法,您可以灵活控制保存图像的格式、质量、尺寸等参数。建议根据具体使用场景(如论文、网页、打印等)选择合适的保存配置。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值