matplotlib数据可视化实验报告1(最终版)

2022-09-25 09:36:15
import matplotlib.pyplotas plt# 创建绘图对象figure,设置画布大小figsize,分辨率dpi,背景颜色facecolor可以用十六进制颜色代码
fig=plt.figure(figsize=(6,6),dpi=100,facecolor='#dfd7d7')#划分子图ax
ax=fig.add_subplot(1,1,1)import numpyas 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,y2006inenumerate(Y2006):
    plt.text(x2006,y2006,'%s'%y2006,ha='center',va='bottom')for x2007,y2007inenumerate(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.mplot3dimport 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参数没有显示出来,图片的背景都是生成的白色。

  • 作者:kelly old uncle
  • 原文链接:https://blog.csdn.net/qq_42760920/article/details/109162588
    更新时间:2022-09-25 09:36:15