由于最近论文里需要插入绘图,因此写一篇博客记录一下
折曲线图
基本绘图
在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的多次调用,即可实现将多条曲线放入画布中。
这里的注意点是绘制多条曲线是通常需要对多条曲线使用不同标识标记。这里需要的主要是三个参数。分别是color
、marker
、label
分别表示的是线段的颜色、标识(就是上面线段中每隔一段的图形)、线段标签。线段标签作用是可以使用方法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()
效果为
这里的柱体不多,如果出现柱题较多的情况可以通过参数使文字竖着显示
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')
将实际值作为值,可以使得柱体间隔均匀美观。