import matplotlib.pyplot as plt
# 创建绘图对象figure,设置画布大小figsize,分辨率dpi,背景颜色facecolor可以用十六进制颜色代码
fig=plt.figure(figsize=(6,6),dpi=100,facecolor='#dfd7d7')
#划分子图ax
ax=fig.add_subplot(1,1,1)
import numpy as np
x = np.linspace(-3,3,100)
y = np.random.randn(100)
#设置中文显示
plt.rcParams['font.sans-serif'] = 'SimHei'
plt.rcParams['axes.unicode_minus'] = False
#生成散点图
plt.grid(linestyle = ':',color = 'r',alpha = 0.5)
plt.scatter(x,y,c='k',alpha = 0.3,marker = '*',label = 'satter',lw = 1,edgecolor = 'r')
#使用marker改变点形状
plt.xlim(0,4)
plt.ylim(-3,3)
#表格设计
plt.xlabel('x轴')
plt.ylabel('y轴')
plt.axhline(y = 0,color = 'r',ls = '-.',alpha = 0.8)
plt.axvline(x = 2.0,color = 'r',ls = '-.',alpha = 0.8)
plt.legend(loc = 'upper right')
plt.title('Structure of matplotlib')
#生成sin图
x = np.linspace(1,3.5,100)
y = np.sin(x)
plt.plot(x,y,c ='y',alpha = 0.5,ls = '--',label = 'sin(x)',lw = 2)
plt.legend()
#设置平行于x/y轴的参考区域
plt.axvspan(xmin=1.5,xmax=2.5,color='blue',alpha=0.1)
plt.axhspan(ymin=-1,ymax=1,color='yellow',alpha=0.1)
plt.annotate('maxium',xy = (1.5,1),xytext = (1.3,1.3),arrowprops = {'arrowstyle':'->','connectionstyle':'arc3'})
#connectionstyle描绘箭头的样式的,例如箭头的一个弧度之类的
# 创建绘图对象figure,设置画布大小figsize,分辨率dpi,背景颜色facecolor可以用十六进制颜色代码
fig=plt.figure(figsize=(6,6),dpi=100,facecolor='#dfd7d7')
#子图ax1
ax1 =fig.add_subplot(2,2,1)
x = np.linspace(1,3.5,100)
y = np.sin(x)
plt.plot(x,y,c ='y',alpha = 0.5,ls = '--',label = 'sin(x)',lw = 2)
plt.legend()
plt.title('正弦图')
#子图ax2
ax2 = plt.subplot(2,2,2)
x = np.linspace(-3,3,100)
y = np.random.randn(100)
plt.scatter(x,y,c='k',alpha = 0.5,label = 'scatter',marker = '*',lw =1)
plt.legend(loc = 'upper right')
plt.title('散点图')
#子图3
ax3 = plt.subplot(2,2,3)
plt.pie([1,1,1])
plt.title('扇形图')
#子图4
ax4 = plt.subplot(2,2,4)
y = [20, 10, 30, 25, 15]
x = np.arange(5)
# 绘图 x x轴, height 高度, 默认:color="blue", width=0.2 线条的宽度 默认0.8
plt.bar(x, height=y, width=0.5,alpha = 0.8)
#保存图片到文件
plt.savefig(r'C:\Users\L\Desktop\matplotlib.png')
#绘制条形图
Y2006 = [1500,1600,1700,1800,1900]
Y2007 = [2000,2100,2200,2300,2400]
#设置中文显示
plt.rcParams['font.sans-serif'] = 'SimHei'
plt.rcParams['axes.unicode_minus'] = False
labels = ['beijing','shanghai','hongkong','shenzhen','guangzhou']
plt.figure(figsize=(8,8),facecolor = '#FFF0F5')
bar_width = 0.3
plt.bar(np.arange(5),Y2006,label = '2006',color = 'yellow',alpha = 0.7,width = bar_width)
plt.bar(np.arange(5)+bar_width,Y2007,label = '2007',color = 'black',alpha = 0.7,width = bar_width)
plt.xticks(np.arange(5)+bar_width/2,labels)
plt.ylim(1000,2800)
plt.title("2006-2007年平均工资表")
plt.legend()
#为每个条形图添加数值标签
for x2006,y2006 in enumerate(Y2006):
plt.text(x2006,y2006,'%s'%y2006,ha = 'center',va = 'bottom')
for x2007,y2007 in enumerate(Y2007):
plt.text(x2007+0.2,y2007+10,'%s'%y2007)
"""
绘制直方图
data:必选参数,绘图数据
bins:直方图的长条形数目,可选项,默认为10
normed:是否将得到的直方图向量归一化,可选项,默认为0,代表不归一化,显示频数。normed=1,表示归一化,显示频率。
facecolor:长条形的颜色
edgecolor:长条形边框的颜色
"""
data = np.random.randn(10000)
plt.hist(data, bins=40, normed=0, facecolor="#dfd7d7", edgecolor="k",label = 'x')# 显示横轴标签
plt.legend()
plt.xlabel("区间")# 显示纵轴标签
plt.ylabel("频数/频率")# 显示图标题
plt.title("频数/频率分布直方图")
#绘制图中图
flg1 =plt.figure(facecolor = '#dfd7d7')
#add_axes通过相对位置增加子图,add_axes([left,bottom,width,height])
ax5 = flg1.add_axes([0.1,0.1,0.8,0.4])
ax6 = flg1.add_axes([0.3,0.2,0.4,0.2])
plt.plot(np.arange(5),'y->')
#绘制笛卡儿积心型函数
t = np.linspace(-4,4,100)
#在指定的间隔内返回均匀间隔的数字
x = 16*(np.sin(t)**3)
y = 13*np.cos(t)-5*np.cos(2*t)-2*np.cos(3*t)-np.cos(4*t)
plt.scatter(x,y,c='r',marker='.')
plt.text(-12,0,'python数据可视化',size=25,color='k',alpha = 0.5)
plt.fill(x,y,facecolor='pink')
#plt.xticks([]) 不显示刻度
#plt.yticks([])
plt.axis('off')
#plt.grid()
plt.show()
#一次性生成多条直线
a = np.arange(10)
plt.plot(a,a,'r',a,4*a,'g:',a,8*a,'c-.*',a,2*a,'y>-')
``![在这里插入图片描述](https://img-blog.csdnimg.cn/20201019160723866.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQyNzYwOTIw,size_16,color_FFFFFF,t_70#pic_center)
`
```python
#生成正弦函数
x = np.linspace(0, 2*np.pi, 100)
y = np.sin(x)+np.random.random(len(x))
plt.scatter(x,y,c='y',s=50,alpha = 0.5)
plt.plot(x,np.sin(x)+0.5,'b')#+0.5使生成曲线在点两侧
#plt.plot(x,y)
np.power([2,3,4],4)#平方
a = np.random.randn(150)
b = np.random.randn(150)
s = np.power(10*a+20*b,2)
flg2 = plt.figure(facecolor = '#dfd7d7',figsize = (6,10))
alt1 = flg2.add_subplot(3,1,1)
plt.scatter(a,b,s=s,c=np.random.rand(150),cmap=plt.cm.spring,\
marker='*')
atl2 = flg2.add_subplot(3,1,2)
plt.scatter(a,b,s=s,c=np.random.rand(150),cmap=plt.cm.summer,\
marker='o')
atl2 = flg2.add_subplot(3,1,3)
plt.scatter(a,b,s=s,c=np.random.rand(150),cmap=plt.cm.rainbow,\
marker='>')
plt.show()
#绘制3d图
from mpl_toolkits.mplot3d import Axes3D
plt.figure(figsize = (10,6))
data = np.random.randint(0,255,size = [6,6,6])
x,y,z = data[0],data[1],data[2]
ax = plt.subplot(111,projection = '3d')
ax.scatter(x[:2],y[:2],z[:2],c ='y',s=100)
ax.scatter(x[2:4],y[2:4],z[2:4],c ='b',marker = '*',s=100)
ax.scatter(x[4:6],y[4:6],z[4:6],c ='g',marker = 'v',s=100)
ax.set_label('z')
ax.set_label('Y')
ax.set_label('X')
plt.show()
1.通过这次绘图过程,对matplotlib图表绘制所使用的函数和方法印象加深。
plot()函数包含了很多基础的绘图功能,用它来绘制线图;scatter()函数用以绘制散点图;xlim() / ylim()用于设置坐标轴的数值显示范围;xlabel() / ylabel()用于设置坐标轴的标签;grid()函数用于设置图形中的网格线;axhline() / axvline():用于设置水平参考线和垂直参考线。axhspan() / axvspan()用于设置平行于x轴/y轴的参考区域;annotate():添加指向性注释文本,灵活调整注释的位置以及指示箭头的样式, text():图形中的注释,但它跟annotate()的区别是它用于添加不带指向性箭头的文本注释; title():形的标题;
2.明确了结构关系
(1)理解了figure与asex之间的关系,先建画板再建子图,再赋值给对象
fig=plt.figure(figsize=(6,6),dpi=100,facecolor=’#dfd7d7’)
#用add_subplot划分子图ax
ax=fig.add_subplot(1,1,1)
(2)学习了子图之间并列关系,若无先赋值给对象,那么就要按代码顺序plt.绘图。赋值给对象后,对象没有包含的方法就需要用set_函数调用。
3.明确了画图的流程
其中第一步和第二步的创建画图对象和子图对象都可以不设置,系统会默认做设置。第三步的个性化定制就是绘图时必备的。
4.额外学习了直方图的绘制/3D图的绘制/条形图的绘制
使用plt.hist()
plt.hist(data, bins=40, normed=0, facecolor=“blue”, edgecolor=“black”, alpha=0.5,label = ‘x’)# 显示横轴标签
plt.legend()
plt.xlabel(“区间”)# 显示纵轴标签
plt.ylabel(“频数/频率”)# 显示图标题
plt.title(“频数/频率分布直方图”)
使用Axes3D函数
from mpl_toolkits.mplot3d import Axes3D
使用plt.bar()
plt.bar()#用width设置条形宽度
5.matplotlib.org是个很好用的网站,可以学到很多绘制新的各种图的方法,还有用另外一个库seaborn也可以进行绘图。
在此过程中也有遇到一个小问题,就是用savefig函数生成的图片的facecolor参数没有显示出来,图片的背景都是生成的白色。