今天简要学习matplotlib库对数据进行可视化的简单操作。
今天要完成三个目标:
画散点图,
柱状图,
多图合并。
1.matplotlib的基本操作
import matplotlib.pyplot as plt
import numpy as np
#基本用法
x = np.linspace(-1,1,50)
y1 = 2*x + 1
plt.plot(x,y1)
plt.show()
输出结果为:
2.figure的使用
import matplotlib.pyplot as plt
import numpy as np
#figure图像
x = np.linspace(-1,1,50)
y1 = 2*x + 1
y2 = 3*x + 5
plt.figure(num=1,figsize=(8,5))
plt.plot(x,y1)
plt.figure(num=2,figsize=(10,4))
plt.plot(x,y2)
plt.show()
输出结果会是两个不同的图像,一个plt.figure()就是一个图像的模块。在plt.plot中还可以设置颜色,线条宽度,以及线条样式等等。
比如:
plt.plot(x,y1,color='red',linewidth=1.0,linestyle='--')
输出结果会为:
就改变了默认了形式。
3.设置坐标轴
在上面程序的基础上,加入坐标,设置坐标轴要显示的范围,以及xy轴的名字。
import matplotlib.pyplot as plt
import numpy as np
#figure图像
x = np.linspace(-1,1,50)
y1 = 2*x + 1
y2 = 3*x + 5
plt.figure(num=1,figsize=(8,5))
plt.plot(x,y1,color='red',linewidth=1.0,linestyle='--')
plt.xlim((-1,0.5))
plt.ylim((1,2))
plt.xlabel('xxxx')
plt.ylabel('yyyy')
plt.show()
结果如图所示:
入果想要改动坐标轴的范围可以使用如下语句:
new_ticks = np.linspace(-1,1,10)
plt.xticks(new_ticks)
这样x轴的范围就被改动了。y轴同理。
如果想在y轴上加入如下图所示的效果,也可以使用plt.yticks()。
只需要在上述程序中加入:
plt.yticks([1,1.5,2],['bad','ok','good'])即可得到上述效果。
坐标轴图中一共有四根,left,right,bottom,top。可以对其进行删除,换色,换位置等操作。
ax = plt.gca()#获取整个图
ax.spines['right'].set_color('none')#将边框设置为无色
ax.spines['top'].set_color('none')
想把坐标轴挪动到需要的位置,如图。把x轴移动到了y轴1.5的位置作为坐标原点。
ax.xaxis.set_ticks_position('bottom')#将x轴移动
ax.spines['bottom'].set_position(('data',1.5))#outward,axes(按照不同的标准定位,data是其中一个标准。)
4.设置图例
有的时候图像上不止有一根线,为了区分和标注,得生成图例,以便于分析图像。
import matplotlib.pyplot as plt
import numpy as np
#figure图像
x = np.linspace(-1,1,50)
y1 = 2*x + 1
y2 = 3*x + 5
plt.figure(num=1,figsize=(8,5))
plt.plot(x,y1,color='red',linewidth=1.0,linestyle='--',label='up')
plt.plot(x,y2,color='blue',linewidth=0.5,label='down')
plt.xlabel('xxxx')
plt.ylabel('yyyy')
plt.legend(loc='best')#生成图例,best的意思是能够让图例自动寻找一个最好的位置。
plt.show()
结果如下图:
5.散点图
绘制散点图需要使用到scatter这个方法。
import numpy as np
import matplotlib.pyplot as plt
x = np.random.random(30)
y = np.random.random(30)
plt.scatter(x,y)
plt.show()
生成的散点图如下:
还可以根据值的不同,生成不同的颜色。
import numpy as np
import matplotlib.pyplot as plt
x = np.random.normal(0,1,1024)
y = np.random.normal(0,1,1024)
t = np.arctan2(y,x)
plt.scatter(x,y,s=75,c=t,alpha=0.5)#alpha是透明度的意思
plt.xlim((0,1.5))
plt.ylim((0,1.5))
plt.xticks(())#隐藏所有的ticks
plt.yticks(())
plt.show()
运行结果是:
是不是很漂亮呀~
6.柱状图
柱状图,需要用到bar()这个方法。
import numpy as np
import matplotlib.pyplot as plt
# x = np.random.normal(0,1,1024)
# y = np.random.normal(0,1,1024)
# t = np.arctan2(y,x)
n = 12
x = np.arange(n)
y1 = (1-x/float(n))*np.random.uniform(0.5,1.0,n)
plt.bar(x,+y1,facecolor='#ff9999',edgecolor='white')
for x,y in zip(x,y1):
plt.text(x + 0.4,y + 0.05,'%.2f' %y,ha = 'center',va='top')
plt.xlim((-.5,n))
plt.ylim((-1.25,1.25))
plt.xticks(())#隐藏所有的ticks
plt.yticks(())
plt.show()
运行结果是:
7.subplot多合一显示
要在一张图中画多个图形,要使用到subplot()。
import numpy as np
import matplotlib.pyplot as plt
plt.figure()
plt.subplot(2,2,1)#两行两列 第一个位置的图
plt.plot([0,1],[0,1])
plt.subplot(2,2,2)#两行两列 第2个位置的图
plt.plot([0,1],[0,1])
plt.subplot(2,1,2)#前面的把第一行画满之后,要占用两行中的第二行,外加12列都要占用。这里是有点绕弯的。
plt.plot([0,1],[0,1])
plt.show()
结果如图所示。
以上是matplotlib的简单使用。