matplotlib画简单的论文图像

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

折曲线图

基本绘图

在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轴显示的数字是实际数据的数字

  • 18
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值