还有高手?气象要素廓线局部放大绘制

2024-06-20 17:26:57 浏览数 (2)

前言

首先,我们需要使用Python中的Matplotlib库来创建一个简单的气象数据可视化。 我们将使用Matplotlib的plot函数来绘制气象数据的整体趋势图, 然后使用mark_inset函数来创建一局部放大的子图,以便更详细地查看数据的某个特定部分。

以下是步骤: 导入必要的库 创建示例气象数据 绘制整体趋势图 创建局部放大的子图 在子图中绘制局部放大的气象数据 显示图形 让我们逐步实现这些步骤。

代码语言:javascript复制
代码语言:javascript复制
import matplotlib.pyplot as plt
import numpy as np
from mpl_toolkits.axes_grid1.inset_locator import TransformedBbox, BboxPatch, BboxConnector
def mark_inset(parent_axes, inset_axes, loc1a=1, loc1b=1, loc2a=2, loc2b=2, **kwargs):
    rect = TransformedBbox(inset_axes.viewLim, parent_axes.transData)

    pp = BboxPatch(rect, fill=False, **kwargs)
    parent_axes.add_patch(pp)

    p1 = BboxConnector(inset_axes.bbox, rect, loc1=loc1a, loc2=loc1b, **kwargs)
    inset_axes.add_patch(p1)
    p1.set_clip_on(False)
    p2 = BboxConnector(inset_axes.bbox, rect, loc1=loc2a, loc2=loc2b, **kwargs)
    inset_axes.add_patch(p2)
    p2.set_clip_on(False)

    return pp, p1, p2
# 生成随机数据
height = np.arange(0, 5000, 100)
temperature = np.random.randint(-50, 50, size=len(height))

# 创建图形对象和子图对象
fig, (ax1, ax2) = plt.subplots(1, 2, figsize=(20,12))

# 在第一个子图中绘制温度随高度变化的曲线图
ax1.plot(temperature, height)
ax1.set_xlabel('Temperature (°C)')
ax1.set_ylabel('Height (m)')
ax1.set_title('Temperature vs. Height')

# 在第二个子图中绘制放大的子图
ax2.plot(temperature, height)
ax2.set_xlabel('Temperature (°C)')
ax2.set_ylabel('Height (m)')
ax2.set_title('Temperature vs. Height (Zoomed)')

# 设置第二个子图的范围
ax2.set_ylim([1000, 3000])
ax2.set_xlim([-50, 50])
mark_inset(ax1, ax2, loc1a=2, loc1b=1, loc2a=3, loc2b=4, fc='none', ec='black', lw=1.75)
plt.show()
代码语言:javascript复制

正在我自鸣得意时,上网一看,没想到还有高手 matplotlib早就做了,那么我们来学习一下

代码语言:javascript复制
代码语言:javascript复制
import matplotlib.pyplot as plt
import numpy as np

# 生成随机数据
height = np.linspace(0, 5000, 50)
temperature = np.random.randint(-50, 50, size=len(height))

# 创建图形对象和子图对象
fig, (ax1) = plt.subplots(1, figsize=(10,20))

# 在第一个子图中绘制温度随高度变化的曲线图
ax1.plot(temperature, height)
ax1.set_xlabel('Temperature (°C)')
ax1.set_ylabel('Height (m)')
ax1.set_title('Temperature vs. Height')


# 添加放大的子图及连接线
x1, x2, y1, y2 = -50, 50, 1000, 3000  # subregion of the original image
axins = ax1.inset_axes([1.2, 0.1, 0.6, 0.6], xlim=(x1, x2), ylim=(y1, y2), xticklabels=[], yticklabels=[])
axins.plot(temperature, height)
axins.set_title('Zoomed Inset')
ax1.indicate_inset_zoom(axins, edgecolor="black")

plt.show()
代码语言:javascript复制

总的来说,Python的魅力就是路不只有一条。

如果觉得有帮得到的地方,麻烦您动动小手指文末的广告都给我点一下,然后一键三连啦,感谢!

0 人点赞