Python之Matplotlib(三)
一、各类图形
1、散点图plt.scatter()
- 首先,先引入matplotlib.pyplot简写作plt,
- 再引入模块numpy用来产生一些随机数据。
⑴数据生成
# 散点图
import matplotlib.pyplot as plt
import numpy as np
n=1024
x=np.random.normal(0,1,n)#每个点的x值
y=np.random.normal(0,1,n)#每个点的y值
t=np.arctan2(y,x)
# print(x,y,t)
⑵画图
数据集生成完毕,现在来用 plt.scatter 画出这个点集,输入X和Y作为location,size=75,颜色为T,color map用默认值,透明度alpha 为 50%。 x轴显示范围定位(-1.5,1.5),并向xtick()函数传入空集()来隐藏x坐标轴,y轴同理:
plt.scatter(x,y,s=75,c=t,alpha=.5)
plt.xlim(-1.5,1.5)#x的范围
plt.xticks(())#忽略x的刻度
plt.ylim(-1.5,1.5)
plt.yticks(())#忽略x的刻度
plt.show()
运行结果
2、柱状图plt.bar()
柱状图是在数据分析过程中最为常用的图表,折线图和饼图能够表达的信息,柱状图都能够表达。
⑴数据生成
首先生成画图数据,向上向下分别生成2组数据,X为0到9的整数 ,Y是相应的均匀分布的随机数据。
⑵画图
- 使用的函数是plt.bar,参数为X和Y
- 修改颜色和数据标签:
- 用 plt.bar 函数中的facecolor参数设置柱状图主体颜色
- 用edgecolor参数设置边框颜色
- 函数 plt.text 可以帮助我们在柱体上方(下方)加上数值:用%.2f保留两位小数
- 用ha='center’设置横向居中对齐
- 用va='bottom’设置纵向底部(顶部)对齐
# 柱状图
import matplotlib.pyplot as plt
import numpy as np
n=10
x=np.arange(0,n,1)
# print(x)
y1=(1-x/float(n))*np.random.uniform(0.5,1.0,n)
y2=(1-x/float(n))*np.random.uniform(0.5,1.0,n)
# 修改颜色和数据标签
plt.bar(x,+y1,facecolor='#FFCCCC',edgecolor='white')#设置自己喜欢的颜色,颜色集见上篇
plt.bar(x,-y2,facecolor='#6699CC',edgecolor='white')
for x0,y in zip(x,y1):
plt.text(x0,y,'%.2f'%y,ha='center',va='bottom')#ha表示水平对齐方式,va表示垂直对齐方式
for x0,y in zip(x,y2):
plt.text(x0,-y,'%.2f'%y,ha='center',va='top')
#设置x与y的范围
plt.xlim((-.5,n))
plt.ylim((-1.25,1.25))
plt.show()
运行结果
3、等高线图
⑴数据生成
数据集即三维点 (x,y) 和对应的高度值,共有256个点。高度值使用一个 height function f(x,y) 生成。 x, y 分别是在区间 [-3,3] 中均匀分布的256个值,并用meshgrid在二维平面中将每一个x和每一个y分别对应起来,编织成栅格
⑵画图
- 使用函数plt.contourf把颜色加进去,位置参数分别为:X, Y, f(X,Y)
- 20代表等高线的密集程度
- 透明度为0.75
- 将 f(X,Y) 的值对应到color map的RdBu组中寻找对应颜色
- 接下来进行等高线绘制。使用plt.contour函数划线。位置参数为:X, Y, f(X,Y)。颜色选黑色,线条宽度选0.5。
- 最后我们要通过 plt.clabel() 在等高线上加入高度数值,即加入Label,其中参数 inline 控制是否将 Label 画在线里面,fontsize 设置字体大小为10。
- 将坐标轴隐藏
# 自定义f函数:根据x,y的值返回一个高度
import matplotlib.pyplot as plt
import numpy as np
def f(x,y):
return(1-x/2+x**5+y**3)*np.exp(-x**2 -y**2)
n=256
x=np.linspace(-3,3,n)
y=np.linspace(-3,3,n)
x,y=np.meshgrid(x,y)
#颜色填充,20表示等高线的密集程度,alpha表示透明度,cmap的使用是因为可以将数字与颜色一一对应,可以裂解为matplotlib为大家提供了一个可以直接调用的配色版
plt.contourf(x,y,f(x,y),20,alpha=.5,cmap=plt.cm.RdBu)
# 绘制等高线,colors表示等高线的颜色,linewidth表示显得宽度
c=plt.contour(x,y,f(x,y),20,colors='black',linewidth=.1)
# 添加高度数字,inline表示将高度写在线内,fontsize表示数字的大小
plt.clabel(c,inline=True,fontsize=10)
# 隐藏坐标轴
plt.xticks(())
plt.yticks(())
plt.show()
运行结果
密集程度为8
4、随机矩阵画图
⑴数据生成
首先生成一个 3x3 的 2D-array ,也就是三行三列的格子,array 中的每个值经过colormap与一个颜色对应并填充在格子中
import matplotlib.pyplot as plt
import numpy as np
a=np.random.random(9)
a=a.reshape(3,3)
⑵画图
我们选cmap的参数时用的是:cmap=plt.cmap.RdBu,而现在,我们可以直接用单引号传入参数。 origin='lower’代表的就是选择的原点的位置。而 interpolation 表示画图方式,从这里可看到matplotlib官网上对于内插法的不同方法的描述。这里我们使用的是内插法中的 Nearest-neighbor 的方法,其他的方式也都可以随意取选。
# interpolation可以为其他:hanning,hamming,hermite,mitchell
plt.imshow(a,interpolation='nearest',cmap='RdBu',origin='lower')
⑶增加colorbar
colorbar可以为我们显示不同颜色的区块所对应的具体数值。其中shrink参数可以用来调整 colorbar 的长度,这里我们使colorbar的长度变短为原来的9%,这样我们2D图像就创建完毕了
# 增加colorbar
plt.colorbar(shrink=.9)
# 隐藏坐标轴
plt.xticks(())
plt.yticks(())
plt.show()
运行结果
interpolation='hamming'
注 因为是随机产生的数据,因此每次产生数据不同,两图有较大差异,如果使用相同数据则颜色分布是相同的,只是晕染效果不同
自学自用,希望可以和大家积极沟通交流,如有错误还请指正,不喜勿喷