python数据——matplotlib绘制各种常见图形

plot 模块中绘制基础图的常用函数

plt.plot(x,y,fmt,…):绘制一个坐标图
plt.boxplot(data,notch,position):绘制一个箱形图
plt.bar(left,height,bottom):绘制一个条形图
plt.barh(width,bottom,left,height):绘制一个横向条形图
plt.polar(theta,r):绘制极坐标图
plt.pie(data,explode):绘制饼图
plt.psd(x,NFFT = 256,pad_to,Fs):绘制功率谱密度图
plt.specgram(x,NFFT = 256,pad_to,F):绘制谱图
plt.cohere(x,y,NFFT = 256,Fs):绘制X-Y的相关性函数
plt.scatter(x,y):绘制散点图,其中,x和y长度相同
plt.step(x,y,where):绘制步阶图
plt.hist(x,bins,normed):绘制直方图
plt.contour(X,Y,Z,N):绘制等值图
plt.vlines():绘制垂直图
plt.stem(x,y,linefmt,markerfmt):绘制柴火图
plt.plot_date():绘制数据日期

1.折线图(plt.plot()函数)

import matplotlib.pyplot as plt
import numpy as np

x=[2016,2017,2018,2019,2020]
y=[12,15,18,20,45]
#x与y一一对应

plt.plot(x,y)
#生成图表

#设置x,y显示的刻度
plt.yticks([10,20,30,40,50])
plt.xticks([2016,2017,2018,2019,2020])

plt.show()
#显示图表

在这里插入图片描述
2.条形图(又名柱状图)(plt.bar()函数)

import matplotlib.pyplot as plt
import numpy as np

n=12
X=np.arange(n)#arange函数,类似于range()函数,用来创建一维数组
Y1=(1-X/float(n))*np.random.uniform(0.5,1.0,n)
#random.uniform()从一个均匀分布[low,high)中随机采样,注意定义域是左闭右开,即包含low,不包含high.

Y2=(1-X/float(n))*np.random.uniform(0.5,1.0,n)

plt.bar(X,+Y1,facecolor='#9999ff',edgecolor='white')
#facecolor填充颜色,edgecolor边框颜色
plt.bar(X,-Y2,facecolor='#ff9999',edgecolor='white')


for x,y in zip(X,Y1):
    #zip(a,b)函数分别从a和b中取一个元素组成元组,再次将组成的元组组合成一个新的迭代器。
    plt.text(x+0.2,y+0.05,'%.2f'%y,ha='center',va='bottom')
    #ha:horizontal alignment 水平对齐方式
    #va:纵向对齐方式

for x,y in zip(X,Y2):
    #ha:horizontal alignment 水平对齐方式
    #va:纵向对齐方式
    plt.text(x+0.2,-y-0.05,'%.2f'%y,ha='center',va='top')


plt.xlim(-5,n) #x显示的范围
plt.xticks(())#隐藏x轴上的刻度
plt.ylim(-1.25,1.25)
plt.yticks(())

plt.show()#显示图像

在这里插入图片描述
3.直方图(plt.hist()函数)

import matplotlib.pyplot as plt
import numpy as np

#本例是标准正态分布
mu=100  #设置均值,中心所在点
sigma=20  #用于将每个点都扩大的倍数

x=mu+sigma*np.random.randn(20000)
#x中的点分布在mu旁边

plt.hist(x,bins=100,color='green',density=True)
#x:这个参数是arrays,指定每个x的分布位置
#bins:指定箱子的个数,也就是有几个条形图
#color:每个箱子的颜色
#原来有的是normed=True,但是python3里面已经移除了,变成了density
#density:是否对y轴数据进行标准化,若为Ture,则是在本区间的点占所有点的概率

plt.show()

这个每次运行的时候这个直方图的图形都是不同的,因为x是随机数

4.散点图(plt.scatter()函数)

import matplotlib.pyplot as plt
import numpy as np

x=np.random.normal(0,1,1024)
#np.random.normal()的意思是一个正态分布,这里是随机分布一些点
y=np.random.normal(0,1,1024)
T=np.arctan2(y,x)#设置散点颜色,可以变成不同的颜色,无需深入研究

plt.scatter(x,y,s=50,alpha=0.5)#s是指散点大小,c是指散点颜色,alpha是指散点的透明度

plt.xlim(-1.5,1.5)#x轴的显示范围
plt.ylim(-1.5,1.5)
plt.xticks(())#同下
plt.yticks(())#隐藏y坐标上的值

plt.show()

在这里插入图片描述
5.等高线图(plt.scatter()函数)

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
#np.linspace在指定的间隔内返回均匀间隔的数字,下面是-3到3之间,且元素个数为256个。
x=np.linspace(-3,3,n)#x轴
y=np.linspace(-3,3,n)#y轴


X,Y=np.meshgrid(x,y)#底部是网格形式
#输入的x,y,就是网格点的横纵坐标列向量(非矩阵)
#输出的X,Y,就是坐标矩阵。


#等高线的颜色设置
plt.contourf(X,Y,f(X,Y),8,alpha=0.75,cmap=plt.cm.hot)#8就是分成10部分
#登高线的线
C=plt.contour(X,Y,f(X,Y),8,colors='black',linewidths=0.5)

#数字描述
plt.clabel(C,inline=True,fontsize=10)
#inline=Ture是围着数字,等于false的话是线盖着数字,fontsize是数字大小



plt.xticks(())#隐藏x轴的刻度
plt.yticks(())
plt.show()

在这里插入图片描述
6.饼状图(plt.pie()函数)

import matplotlib.pyplot as plt


plt.rcParams['font.sans-serif']=['SimHei']
# 正常显示中文标签
plt.rcParams['axes.unicode_minus']=False
# 用来正常显示负号

labels='玫瑰花','月季','菊花','百合花'
sizes=15,20,45,10
colors='yellowgreen','gold','lightskyblue','lightcoral'
explode=0,0.1,0,0
plt.pie(sizes,explode=explode,labels=labels,colors=colors,autopct='%1.1f%%',shadow=True,startangle=50)
#sizes指不同扇区的面积(数值),labels是指标签,
#explode是指英文意思是爆炸,表示把饼状图的各个部分像爆炸一样,从中心向四周分散出去。,哪个是0.1哪个往外出来,
#autopct表示自动进行百分比运算,autopct等号后面的值,.2就代表小数点后精确到2位,如果是3就是小数点后精确到3位,f代表浮点数。
#shadow=Ture是指阴影,使饼图更立体,false是没阴影,
#startangle=50表示开始第一块是正时针50度的角度开始画,且逆时针画的
plt.axis('equal')
#设置x,y的刻度一样,使其饼图为正圆
plt.show()

在这里插入图片描述
7.3D图(Axes3D 对象的 plot_surface() 函数)

import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D

fig=plt.figure()
ax=Axes3D(fig)

X=np.arange(-4,4,0.25)
Y=np.arange(-4,4,0.25)
X,Y=np.meshgrid(X,Y)#变成矩阵,也就是网格
R=np.sqrt(X**2+Y**2)#计算,得出z轴
Z=np.sin(R)  #z轴

ax.plot_surface(X,Y,Z,rstride=1,cstride=1,cmap=plt.get_cmap('rainbow'))
#rstide,线与线之间的行距,cstride线与线之间的列跨,数值越大,线与线之间的距离越大
#cmap,表示映射颜色,这里的 rainbow表示彩虹色

#等高线的设置,这里是底下那个面
ax.contourf(X,Y,Z,zdir='z',offset=-2,cmap='rainbow')
#zdir表示从哪个轴压下去,
#offset表示把等高线图放到距离x=0轴平面多远的地方,整数表在上面,负数表示在下面

ax.set_zlim(-2,2)#z轴让他显示的高度范围
plt.show()

在这里插入图片描述

发布了15 篇原创文章 · 获赞 32 · 访问量 2941

猜你喜欢

转载自blog.csdn.net/weixin_43920952/article/details/104268838
今日推荐