import numpy as np from matplotlib import cm import matplotlib.pyplot as plt import matplotlib.cm as cm delta = 0.2 x = np.arange(-3,3,delta) y = np.arange(-3,3,delta) X,Y = np.meshgrid(x,y) Z=X**2 +Y**2 x= X.flatten() y= Y.flatten() z= Z.flatten() fig = plt.figure(figsize=(12, 6)) ax1 = fig.add_subplot(121,projection = '3d') ax1.plot_trisurf(x,y,z, cmap = cm.jet ,linewidth = 0.01) plt.title("3D") ax2 = fig.add_subplot(122) cs = ax2.contour(X,Y,Z,15,cmap = 'jet') ax2.clabel(cs,line = True ,fontsize = 10, fmt= '%1.1f' ) plt.title("Contour") plt.show() 优化这段代码
以下是优化后的代码:
import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
delta = 0.2
x = y = np.arange(-3, 3, delta)
X, Y = np.meshgrid(x, y)
Z = X**2 + Y**2
fig = plt.figure(figsize=(12, 6))
ax1 = fig.add_subplot(121, projection='3d')
ax1.plot_surface(X, Y, Z, cmap='jet')
ax1.set_title("3D")
ax2 = fig.add_subplot(122)
cs = ax2.contour(X, Y, Z, 15, cmap='jet')
ax2.clabel(cs, inline=True, fontsize=10, fmt='%1.1f')
ax2.set_title("Contour")
plt.show()
主要的改动如下:
- 从
matplotlib
中导入mpl_toolkits.mplot3d
,以便使用 3D 绘图函数。 - 使用
plot_surface
函数绘制 3D 图形,而不是plot_trisurf
函数,因为前者效果更好且速度更快。 - 调整了代码格式,使其更易读。
import h5py import healpy as hp import numpy as np import matplotlib.pyplot as plt
使用 h5py
、healpy
、numpy
和 matplotlib
进行数据处理与可视化的示例
创建和读取 HDF5 文件中的压缩数据集
为了高效地存储大量数据,可以利用 h5py
库来创建带有压缩功能的数据集。这不仅节省磁盘空间而且加快了I/O操作的速度。
import h5py
import numpy as np
with h5py.File('compressed_data.h5', 'w') as f:
dataset = f.create_dataset(
'example_dataset',
data=np.random.rand(100, 100),
compression="gzip",
compression_opts=9
)
print("已成功创建并保存了一个带压缩选项的数据集")
with h5py.File('compressed_data.h5', 'r') as file:
loaded_data = file['example_dataset'][:]
print(f"加载的数据形状为 {loaded_data.shape}")
上述代码展示了如何使用 h5py
来写入和读取具有高压缩率的二维随机数组[^2]。
处理球面坐标系下的天文学数据
对于涉及全天域的地图或天文观测数据分析的任务来说,healpy
是一个非常有用的工具包。它允许用户轻松地在等面积像素化方案下表示全天空图,并支持多种投影方式转换等功能。
import healpy as hp
import numpy as np
import matplotlib.pyplot as plt
nside = 32
m = np.arange(hp.nside2npix(nside))
hp.mollview(m, title="HEALPix Map Example")
plt.show()
这段脚本生成了一张简单的 HEALPix 地图实例,其中每个像素都按照其索引编号着色[^3]。
数据可视化
当涉及到科学计算领域内的图形展示时,matplotlib
提供了一系列强大的绘图接口用于定制各种类型的图表。结合其他库如 seaborn
或者专门针对特定应用场合设计的扩展模块(比如前面提到过的 Cufflinks),可以让科研工作者们更方便快捷地制作出高质量的研究成果报告所需的精美插图。
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
import numpy as np
fig = plt.figure(figsize=(8, 6))
ax = fig.add_subplot(projection='3d')
X = np.linspace(-5, 5, 100)
Y = np.linspace(-5, 5, 100)
X, Y = np.meshgrid(X, Y)
Z = X ** 2 + Y ** 2
surf = ax.plot_surface(X, Y, Z, cmap=plt.cm.coolwarm)
fig.colorbar(surf, shrink=0.5, aspect=5)
plt.title('A Simple Surface Plot')
plt.show()
此部分介绍了怎样运用 Matplotlib 的三维作图能力绘制曲面图;同时也可以探索更多高级特性以满足不同需求下的视觉表达要求[^4]。
import numpy as np import matplotlib. pyplot as plt N=7 X=[3,4,7,6, 2,8,9] y= np. arange N pl= plt. barh (y, left=0, width=x) plt. show()
这段代码导入了numpy库并将其别名设为np
,同时导入了matplotlib.pyplot模块的部分功能,将这部分功能别名为plt
。接下来,定义了两个列表:
N = 7
表示有7个数据点。X = [3, 4, 7, 6, 2, 8, 9]
是x轴的数据。y = np.arange(N)
利用numpy的arange函数创建了一个从0开始到N - 1
(这里是6)的等差数列,通常这表示y轴的索引或位置。
然后,使用plt.barh()
函数绘制水平条形图。参数y
表示数据的位置(在这个例子中是y轴索引),left=0
表示每个条形的起始位置都在x轴上的0,而宽度由width=x
指定,即每个条形的长度对应列表中的一个值。
最后,调用plt.show()
显示绘制的图表。
看起来你少了一个y
变量的赋值,因为你在y=np.arange(N)
后面没有给y
赋值。如果y
应当与X
相同,则应更正为y=X
。完整的代码可能是这样的:
import numpy as np
import matplotlib.pyplot as plt
N = 7
X = [3, 4, 7, 6, 2, 8, 9]
y = X # Assuming 'y' should have the same values as 'X'
plt.barh(y, left=0, width=X)
plt.show()
如果你需要垂直条形图(而非水平),则应使用plt.bar()
而不是plt.barh()
。
相关推荐
















