使用matplotlib绘制高级图表

本文介绍了如何使用matplotlib库创建高级图表,包括使用contour()函数生成三维结构的等值线图,通过设置cmap参数调整颜色,并利用colorbar()添加颜色图例。此外,还讲述了plot_surface()函数用于绘制3D曲面,以及如何通过将2D图形应用到Axes3d对象来创建多面板图形、极区图、3D散点图和3D条状图等。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

**1.**contour():生成三维结构表面的等值线图(需要先用f=(x, y)生成一个三维结构)

import numpy as np
dx = dy = 0.01
x = np.arange(-2.0,2.0,dx)
y = np.arange(-2.0,2.0,dy)
X,Y = np.meshgrid(x,y)             #meshgrid方法用来生成网格矩阵
def f(x,y):
    return (1-y**5 + x**5)*np.exp(-x**2-y**2)
C = plt.contour(X,Y,f(X,Y),8,colors='black')
plt.contourf(X,Y,f(X,Y),8)
plt.clabel(C,inline=1, fontsize=10)
plt.show()

输出:

用contourf函数的参数cmap=还可以赋值其他颜色,例如plt.cm.hot
colorbar()函数还可以增加一个颜色图例

**2.**plot_surface():绘制曲面(3d),还可以用其他相应 的函数来打造其他的3d图形,只要将2d图形应用到Axes3d对象

from mpl_toolkits.mplot3d import Axes3D
import matplotlib.pyplot as plt
import numpy as np
fig = plt.figure()
ax = Axes3D(fig)
X = np.arange(-2,2,0.1)
Y = np.arange(-2,2,0.1)
X,Y = np.meshgrid(X,Y)
def f(x,y):
    return (1-y**5 + x**5)*np.exp(-x**2-y**2)
ax.plot_surface(X,Y,f(X,Y),rstride=1,cstride=1,cmap=plt.cm.hot)
ax.view_init(elev=30,azim=125)              #旋转曲面,修改这两个参数可以从不同视角查看曲面
plt.show()                                   #elve(从哪个高度查看), azim(曲面旋转的角度)

多面板图形


fig = plt.figure()
ax = fig.add_axes([0.1,0.1,0.8,0.8])  #用figure()函数读取到Figure对象
                                         #用此函数在它上面定义两个Axes对象
inner_ax = fig.add_axes([0.6,0.6,0.25,0.25])
x2 = x1 = np.arange(10)
y1 =  np.array([1,2,7,1,5,2,4,2,3,1])
y2 = np.array([1,3,4,5,4,5,2,6,4,3])
ax.plot(x1,y1)           #用plot()方法可以为Axes对象传入两列数据
inner_ax.plot(x2,y2)
plt.show()

gs = plt.GridSpec(3,3)         #把绘图区域分成多个子区域
fig = plt.figure(figsize=(6,6))
x1 = np.array([1,3,2,5])
y1 = np.array([4,3,7,2])
x2 = np.arange(5)
y2 = np.array([3,2,4,6,4])
s1 = fig.add_subplot(gs[1,:2])          #把多个子区域分配给每一幅子图
s1.plot(x,y,'r')
s2 = fig.add_subplot(gs[0,:2])
s2.bar(x2,y2)
s3 = fig.add_subplot(gs[2,0])
s3.barh(x2,y2,color='g')
s4 = fig.add_subplot(gs[:2,2])
s4.plot(x2,y2,'k')
s5 = fig.add_subplot(gs[2,1:])
s5.plot(x1,y1,'b^',x2,y2,'yo')
plt.show()

还有一些极区图(将角度列表和半径列表传给bar),3d散点图, 3d条状图, 3d曲面图等, 只需要将2d图形应用到Axes3d对象

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值