首页 > 编程问答 >如何在Python中对轮廓图应用点画?

如何在Python中对轮廓图应用点画?

时间:2024-07-25 10:48:57浏览次数:14  
标签:python matplotlib python-xarray contourf stipple

我想向 Xarray DataArray 数据添加点画以指示重要性。该数据是经纬度网格上的二维气候数据。我想提供一个 True/False 掩码来绘制映射的变量数据。我正在尝试使用contourf来达到此目的,但如果它们更合适,我愿意接受其他方法。

我尝试过使用 contourf孵化 点画重要区域,但点画点覆盖了所有区域绘图区域。

我发现了 MATLAB 点画文档 R 的类似问题“向图像轮廓图添加点画”

下面是我的说明性示例问题。

所需的输出将是左轮廓图,仅在掩码为 True 的情况下带有点画点。

右图显示了我的尝试。您可以看到,无论掩码如何,点画影线都覆盖在所有绘图上,并且掩码值遮盖了 DataArray 的值。

import matplotlib.pyplot as plt
import numpy as np
import xarray as xr

def f(x, y):
    np.sin(x) ** 10 + np.cos(10 + y * x) * np.cos(x)
    return 

x = np.linspace(0, 5, 51)
y = np.linspace(0, 5, 41)

X, Y = np.meshgrid(x, y)
Z = f(X, Y)

da = xr.DataArray(Z, coords = {"lon":x, "lat":y}, dims=["lat", "lon"])

fig =plt.figure(figsize=(12, 6))
ax1 = plt.subplot(121)
ax2 = plt.subplot(122)

ax1.contourf(da.lon, da.lat, da)

mask = da>0.5
ax2.contourf(da.lon, da.lat, da)
ax2.contourf(da.lon, da.lat, mask, hatches=["."])

IMAGE |左:轮廓图|右:带有点画的面具


要使用 Python 在轮廓图中仅在掩码为 True 的地方应用点画,可以使用 contourf 创建两个独立的轮廓图:一个用于数据,另一个用于掩码,并使用 hatches 参数应用点画。

以下是经过修改的代码:

import matplotlib.pyplot as plt
import numpy as np
import xarray as xr

def f(x, y):
    return np.sin(x) ** 10 + np.cos(10 + y * x) * np.cos(x)

x = np.linspace(0, 5, 51)
y = np.linspace(0, 5, 41)

X, Y = np.meshgrid(x, y)
Z = f(X, Y)

da = xr.DataArray(Z, coords={"lon": x, "lat": y}, dims=["lat", "lon"])

fig = plt.figure(figsize=(12, 6))
ax1 = plt.subplot(121)
ax2 = plt.subplot(122)

# 第一个轮廓图 - 数据
cf = ax1.contourf(da.lon, da.lat, da)

# 第二个轮廓图 - 点画掩码
mask = da > 0.5
cf2 = ax2.contourf(da.lon, da.lat, da)
ax2.contourf(da.lon, da.lat, mask, hatches=[".", ''], colors='none')

plt.show()

在此代码中:

  1. 我们像以前一样创建第一个轮廓图 ( cf ) 以显示数据。

  2. 对于第二个轮廓图 ( cf2 ),我们也绘制数据,但更重要的是,我们使用 contourf hatches 参数绘制了一个附加的轮廓图,其中点画模式仅应用于 mask 为 True 的区域。 colors='none' 参数确保我们只看到点画,而看不到掩码轮廓的颜色。

此方法应该会在想要的地方应用点画,而不会影响原始数据显示。

标签:python,matplotlib,python-xarray,contourf,stipple
From: 78791270

相关文章

  • 在 Python Notebook 中调用 `subprocess` 具有与 `!` shell 不同的 `$PATH`
    我正在IPython笔记本中交互地开发一个包装类。这个包装类调用用java编写的命令行程序,因此我需要访问用于编译该程序的相同版本的java运行时。但是,我注意到在笔记本中使用方便的!运算符,生成的shell实例与在我的终端中使用zsh时不同。这得到了确......
  • 在 VSCode 中激活 conda env 时,“which python”和“sys.path”给出不同的输出
    当我激活condaenv时,选择相应的解释器并在VScode中启动Python乍一看一切似乎都很好:(My_env)name@my_computer:~/Bureau/My_env/Code/current_dir$/home/name/anaconda3/envs/My_env/bin/python-mIPython--no-autoindentPython3.12.4|packagedb......
  • Matplotlib 报告未找到字体系列“serif”
    当我尝试运行时,例如:mpl.rcParams['font.family']='serif'plt.rcParams['figure.figsize']=[15,7]plt.plot(data['flow-time'],data['staticpressurerecovery'])plt.xlabel('Time[s]')plt.ylabel('Sta......
  • Python课程设计项目期末大作业(含免费源代码)
    选题代码下载地址:https://download.csdn.net/download/s44359487yad/89572689选题程序名称:口红色号识别器选题:基于图像处理、人脸识别和Flask构建的图片口红色号识别及商品推荐系统功能:根据上传的图片自动化图像处理后分析脸部特征,并判断其嘴部妆容状态,依托现......
  • python webbrowser.open 不使用默认浏览器
    对你们来说这是一个好奇的家伙..在我的python程序中webbrowser.open('etc..')打开MicrosoftEdge现在奇怪的是,我在与opensChrome(我的默认值)稍有不同的文件夹中还有另一个python程序关于发生了什么的任何想法吗?!!(我知道有人问过类似的问题,但......
  • 如何在 Mac 上运行 Python 文件来读取 txt 文件并将其写入外部硬盘?
    我目前有一个充满了我想阅读的epub的文件夹,一个我已经阅读过并想再次阅读的epub的文件夹,以及一个相应的文件,其中每个文件都有epub文件的名称。问题是,这些文件夹仅位于我的外部硬盘上。我想要做的是让我的脚本解析这些文件夹中的epub列表,并在我的下载文件夹中创建最新的副......
  • 深入探索:使用Python进行网站数据加载逻辑分析与请求
    作为一名资深的Python程序员,我经常需要从网站中提取数据以供分析或进一步处理。这项任务涉及到对网站数据加载逻辑的深入分析,以及使用Python进行高效的网络请求。在本文中,我将分享如何分析网站的数据加载方式,并使用Python的requests库来模拟浏览器行为,获取所需的数据。网站......
  • 如何将 Python 列表添加到 Excel 中已有值的列的末尾?
    我目前正在尝试编写一个程序,将值附加到列表中,然后将这些值添加到Excel数据表中的列中。每次运行该程序时,我都希望在同一列的末尾添加更多值。所以我不确定如何解决这个问题,而且我在网上找到的其他答案也没有取得多大成功。以下是使用openpyxl库在Python中将......
  • 如何学习Python:糙快猛的大数据之路(学习地图)
    在这个AI和大数据主宰的时代,Python无疑是最炙手可热的编程语言之一。无论你是想转行还是提升技能,学习Python都是一个明智之选。但是,该如何开始呢?今天,让我们聊聊"糙快猛"的Python学习之道。什么是"糙快猛"学习法?"糙快猛"学习法,顾名思义,就是:糙:不追求完美,允许存......
  • Python 中 __get__ 方法的内部原理
    我正在摆弄描述符,结果碰壁了。我以为我可以像使用任何其他方法一样直接调用它,但显然,它似乎不一致或者我遗漏了一些东西。假设我有一个用作描述符的坐标类:|||还有一个Point类,它有2个坐标属性:classCoordinate:def__set_name__(self,owner,name):self._na......