Matplotlib 基础的使用方法(初学笔记)
在进行画图前,需要对matplotlib.pyplot 进行导入
方法如下:
from matplotlib import pyplot as plt
1. 折线图
plt.plot默认是一个2D的折线,画图时返回一个line对象
直接使用时需要如下:
plot([x], y, [fmt], *, data=None, **kwargs)
plot([x], y, [fmt], [x2], y2, [fmt2], ..., **kwargs)
让图片显现出来
plt.show()
实例为:
x_age = [20,21,22,23,24,25,26,27,28,29]
y_salary = [10000,20000,30000,40000,50000,60000,70000,80000,90000,100000]
plt.plot(x_age,y_salary)
plt.show()
以上是最基础的使用,如果仅仅是把数据plot出来,而不考虑颜色和线的形式等等,那么这样即可,但是如果希望图片能够有不同的形状,接下来可以更改一些plot里面的参数:
坐标轴:
plt.axis()
如果针对以上的坐标轴觉得不太合适,可以通过plt.axis()方法进行更改,输入的参数格式如下:
[xmin, xmax, ymin, ymax]
x_age = [20,21,22,23,24,25,26,27,28,29]
y_salary = [10000,20000,30000,40000,50000,60000,70000,80000,90000,100000]
plt.plot(x_age,y_salary)
plt.axis([10,50,5000,200000])
plt.show()
这样,更改了坐标轴的系数之后就整个的改变了图片的呈现形式,但本质上没有改变。
折线的形式(如颜色、点和线的形式)
根据matplotlib官方的文档,更改line2D对象的marker形式,只需要在画图时:
x_age = [20,21,22,23,24,25,26,27,28,29]
y_salary = [10000,20000,30000,40000,50000,60000,70000,80000,90000,100000]
plt.plot(x_age,y_salary,linestyle="--",color="g",marker="<")
plt.show()
这样就呈现出了如上的形式,
linestyle这一个参数代表了线型,color这一个参数代表了线的颜色,marker代表了点的显示,
详细参数更多的可以从matplotlib官方地址库查询到
当更加熟练后,可以浓缩操作
x_age = [20,21,22,23,24,25,26,27,28,29]
y_salary = [10000,20000,30000,40000,50000,60000,70000,80000,90000,100000]
plt.plot(x_age,y_salary,"<g--")
plt.show()
出来的效果与之前是一致的,参数的输入格式是
[marker][color][linestyle]
添加图例
与更改线型、颜色和点一样,有两种方法,适用于当有多条线放在一起时,辨识用。
x_age = [20,21,22,23,24,25,26,27,28,29]
y_salary = [10000,20000,30000,40000,50000,60000,70000,80000,90000,100000]
plt.plot(x_age,y_salary,"<g--",label ="age_salary")
plt.legend()
plt.show()
可以看到左上角多了一个图例`
x_age = [20,21,22,23,24,25,26,27,28,29]
y_salary = [10000,20000,30000,40000,50000,60000,70000,80000,90000,100000]
y_salary_2 = [i/2 for i in y_salary]
plt.plot(x_age,y_salary,"<g--",label ="age_salary")
plt.plot(x_age,y_salary_2 ,label="age_salary/2")
plt.legend()
plt.show()
第二种方法就是,
x_age = [20,21,22,23,24,25,26,27,28,29]
y_salary = [10000,20000,30000,40000,50000,60000,70000,80000,90000,100000]
y_salary_2 = [i/2 for i in y_salary]
plt.plot(x_age,y_salary,"<g--")
plt.plot(x_age,y_salary_2 )
plt.legend(["age_salary","age_salary/2"])
plt.show()
效果一致
设置相关的属性
1. x、y轴的标签
x_age = [20,21,22,23,24,25,26,27,28,29]
y_salary = [10000,20000,30000,40000,50000,60000,70000,80000,90000,100000]
plt.plot(x_age,y_salary,"<g--",label ="age_salary")
plt.legend()
plt.xlabel("age")
plt.ylabel("salary")
plt.title("Age-salary")
plt.show()
得到的效果如下:
可以清楚地看到,X/Y坐标轴都加上了对应的标签,且这个坐标系的标签也同样有了标签。
2. 更改坐标轴上的属性
在前图的基础上,发现其x/y坐标轴间隔有点大,过于模糊,可以通过plt.xticks来进行更改
x_age = [20,21,22,23,24,25,26,27,28,29]
y_salary = [10000,20000,30000,40000,50000,60000,70000,80000,90000,100000]
plt.plot(x_age,y_salary,"<g--",label ="age_salary")
plt.legend()
plt.xlabel("age")
plt.ylabel("salary")
plt.title("Age-salary")
plt.yticks(np.linspace(0,150000,5),labels =["one","two","three","four","five"])
plt.show()
plt.yticks()可以输入两个参数,第一个是要将刻度放在数据范围中的哪些位置,缺省情况下位置的值就是刻度标记的值 。第二个labels就是用对应的标签来盖住相关的值,此外还可以输入rotation,这样显示的标签可以进行旋转。
x轴同理
x_age = [20,21,22,23,24,25,26,27,28,29]
y_salary = [10000,20000,30000,40000,50000,60000,70000,80000,90000,100000]
plt.plot(x_age,y_salary,"<g--",label ="age_salary")
plt.legend()
plt.xlabel("age")
plt.ylabel("salary")
plt.title("Age-salary")
plt.yticks(np.linspace(0,150000,5))
plt.show()
这个是没有用标签覆盖的图
柱形图
基本使用
x_age = [20,21,22,23,24,25,26,27,28,29]
y_salary = [10000,20000,30000,40000,50000,60000,70000,80000,90000,100000]
plt.bar(x_age,y_salary)
plt.xlabel("age")
plt.ylabel("salary")
plt.title("Age-salary")
plt.show()
除了用的是bar的按钮,基本没啥差别,当然,如果有多种数据想要一起展现,那也是非常简单的。
多列数据一同展示
x_age = [20,21,22,23,24,25,26,27,28,29]
y_salary = [10000,20000,30000,40000,50000,60000,70000,80000,90000,100000]
y_salary_2 = [i/2 for i in y_salary]
x_index = np.arange(len(x_age))
width = 0.25
plt.bar(x_index+width,y_salary_2,width=width)
plt.bar(x_index,y_salary,width=width)
plt.xlabel("age")
plt.ylabel("salary")
plt.title("Age-salary")
plt.show()
把宽度设置一下即可,其他大致相同,color和label都和折线图一样设置
horizontal bar
想横着展示:
y_salary = [10000,20000,30000,40000,50000,60000,70000,80000,90000,100000]
y_salary_2 = [i/2 for i in y_salary]
x_index = np.arange(len(x_age))
height = 0.25
plt.barh(x_index+height,y_salary_2,height=height)
plt.barh(x_index,y_salary,height=height)
plt.xlabel("age")
plt.ylabel("salary")
plt.title("Age-salary")
plt.show()
饼图Pie Chart
slice = [100,80,60,50,40]
label = ["A","B","C","D","E"]
explode = [0.1,0,0,0,0]
plt.pie(slice,labels=label,explode=explode,shadow=True,
startangle=90,autopct="%1.1f%%",wedgeprops={"edgecolor":"black"})
plt.title("Pie chart")
plt.show()
同上,直接用plt.pie进行画图,只需要调整参数即可
labels参数就是给饼图的那个部分贴标签,按照slice传输进去的顺序
explode顺序也是一样,其作用是让某一个部分凸出显示
shadow是有阴影效果
startangle是指一开始左上角那个部分呈现多少度,我这里设置的90度,
autopct则是显示百分数,
wedgeprops是让每个块之间显示分界线