Matplotlib——画图(散点图、柱状图、等高线图、3D图)

1.画散点图

首先,先引入matplotlib.pyplot简写作plt,再引入模块numpy用来产生一些随机数据。生成100个呈标准正态分布的二维数据组 (平均数是0,方差为1) 作为一个数据集,并图像化这个数据集。每一个点的颜色值用T来表示:

import matplotlib.pyplot as plt
import numpy as np

X = np.random.normal(0,1,100)   #高斯分布(均值为0,方差为1,100个样本)
Y = np.random.normal(0,1,100)   
T = np.arctan2(Y,X)    #反正切函数,返回的是弧度

plt.scatter(X,Y,s=50,c=T,alpha=.8)   #alpha为透明度

plt.xlim(-3,3)
plt.ylim(-3,3)
plt.xticks(())     #参数为空代表隐藏x轴坐标
plt.yticks(())
plt.show()

输入X和Y作为location,size=50,颜色为T,color map用默认值,透明度alpha 为 80%。 x轴显示范围定位(-3,3),并用xtick()函数来隐藏x坐标轴,y轴同理。效果如下图:
在这里插入图片描述

2.画柱状图

生成10个数据,X为 0 到 9 的整数 ,Y是相应的均匀分布的随机数据。 使用的函数是plt.bar,参数为X和Y

下面我们就颜色和数值进行优化。 用facecolor设置主体颜色,edgecolor设置边框颜色为白色

接下来我们用函数plt.text分别在柱体上方加上数值,用%.2f保留两位小数,横向居中对齐ha=‘center’,纵向底部对齐va=‘bottom’:

import matplotlib.pyplot as plt
import numpy as np

X = np.arange(10)
Y = (1-X/float(10))*np.random.uniform(0.5,1.0,10)   #从均匀分布中随机采样(上界、下界、样本输出数目)

plt.bar(X,Y,facecolor='pink',edgecolor='white')

for x,y in zip(X,Y):
    plt.text(x+0.05,y+0.02,'%.2f' % y,ha='center',va='bottom')
    
plt.xlim(-.5,10)
plt.ylim(0,1.0)
plt.xticks(())
plt.yticks(())
plt.show()

在这里插入图片描述

3.等高线图

数据集即三维点 (x,y) 和对应的高度值,共有100个点。高度值使用一个 函数 f(x,y) 生成。 x, y 分别是在区间 [-3,3] 中均匀分布的100个值,并用meshgrid在二维平面中将每一个x和每一个y分别对应起来,编织成栅格:

接下来进行颜色填充。使用函数plt.contourf把颜色加进去,位置参数分别为:X, Y, f(X,Y)。透明度0.75,并将 f(X,Y) 的值对应到color map的暖色组中寻找对应颜色。

接下来进行等高线绘制。使用plt.contour函数划线。位置参数为:X, Y, f(X,Y)。颜色选黑色,线条宽度选0.5。其中,8代表等高线的密集程度,这里被分为10个部分。如果是0,则图像被一分为二。

最后加入Label,inline控制是否将Label画在线里面,字体大小为10。并将坐标轴隐藏:

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)
    
x = np.linspace(-3,3,100)
y = np.linspace(-3,3,100)
X,Y = np.meshgrid(x,y)

plt.contourf(X,Y,f(X,Y),6,alpha=.75,cmap=plt.cm.cool)  #添加颜色进去
C = plt.contour(X,Y,f(X,Y),6,colors='black',linewidth=.5) #画轮廓

plt.clabel(C, inline=True, fontsize=10)
plt.xticks(())
plt.yticks(())
plt.show()

在这里插入图片描述

4.image图

import matplotlib.pyplot as plt
import numpy as np

a = np.arange(9).reshape((3,3))   #构造3x3矩阵
plt.imshow(a, interpolation='nearest',cmap='bone',origin='upper') #升序打印不同值的颜色
plt.colorbar(shrink=.95)  #颜色棒缩放为原来的95%

plt.xticks(())    #隐藏x坐标轴
plt.yticks(())    #隐藏y坐标轴
plt.show()

在这里插入图片描述

5.画3D图

首先在进行 3D Plot 时除了导入 matplotlib ,还要额外添加一个模块,即 Axes 3D 3D 坐标轴显示。

接下来给进 X 和 Y 值,并将 X 和 Y 编织成栅格。每一个(X, Y)点对应的高度值我们用下面这个函数来计算。

import matplotlib.pyplot as plt
import numpy as np
from mpl_toolkits.mplot3d import Axes3D     #导入3D显示模块

fig = plt.figure()   #定义一个图像窗口
ax = Axes3D(fig)   #在窗口上添加3D坐标轴
X = np.arange(-3,3,0.1)
Y = np.arange(-3,3,0.1)
X,Y = np.meshgrid(X,Y)    #将 X 和 Y 编织成栅格
R = np.sqrt(X**2 + Y**2)    
Z = np.sin(R)    #z轴

ax.plot_surface(X,Y,Z,rstride=1,cstride=1,cmap=plt.get_cmap('rainbow'))  #横纵坐标跨度为1
ax.contourf(X,Y,Z,zdir='z',offset=-2,cmap=plt.get_cmap('rainbow'))   #投影到z=-2处
ax.set_zlim(-2,2)

plt.show()

在这里插入图片描述

发布了199 篇原创文章 · 获赞 566 · 访问量 2万+

猜你喜欢

转载自blog.csdn.net/weixin_37763870/article/details/105344164