【问题标题】:Converting matplotlib's streamplot coordiantes to numpy coordiantes将 matplotlib 流图坐标转换为 numpy 坐标
【发布时间】:2021-10-09 15:25:29
【问题描述】:

我目前正在使用 matplotlib,以便使用 matplotlib.pyplot.streamplot 创建特定矢量场的模块

在流图中的线条创建和着色之后,我正在尝试为绘图周围发散点周围的空白着色,我试图实现取决于周围白色像素距离的颜色渐变它。

有问题的流图是根据以下内容构建的:

xs=np.linspace(-10,10,2000)
ys=np.linspace(-10,10,2000)

因此,如果分歧位于(出于演示目的)(0,0),它将正好位于绘图的中间。

现在,我能想到的根据距离进行着色的唯一方法有点笨拙,因为它需要我:

  1. 在分歧点的顶部添加一个matplotlib.patches.Rectangle,并使用图像中尚未出现的特定颜色。

  2. 将带有流线和矩形(流图中的每个发散点一个矩形)的绘图转换为np.array

  3. 找到矩形颜色的新坐标(它们表示从流图创建的新np.array 中的分歧点的位置)。

  4. 从彩色像素中计算出我想要的像素。

整个方法感觉笨重且过于复杂,而且显然比我能做的要慢。我确定有一种方法可以将 matplotlib 图中的坐标转换为 np.array 中的坐标,或者处理 matplotlib 中的着色,这将更容易。 遗憾的是,我还没有找到满足这一特定需求的解决方案。

提前感谢您提供的任何帮助!

编辑

我正在添加一个示例(不是我的代码,而是我希望实现的目标的表示)。

我想澄清在圆形补丁顶部添加patches.circle 的解决方案不是我的首选,因为我希望让我的绘画选项更加动态。

【问题讨论】:

  • 你能添加一张图片来说明你想要做什么吗?你能添加一些代码来创建一个带有一些测试数据的类似图吗?你如何定位分歧?你看Matplotlib: How to increase colormap/linewidth quality in streamplot?了吗?
  • @JohanC 添加了一张图片,遗憾的是我尝试了各种方法,但都抓到了,所以我目前在这个问题上没有线索,但如果它有帮助,我试图实现图片中的内容,只有我想相应地为每个像素着色,同时保持黑线完好无损。
  • 也许我不明白你的问题,但我只是在后台使用pcolormeshcontourf 绘制差异,使用灰度和可能的某种透明度,并且最重要的是流图
  • @gboffi 我需要解决的问题是,我需要根据距离以特定顺序为分歧点周围的白色像素着色。编辑:我需要的是一种方法来了解 numpy 数组中像素的坐标相对于它在绘图本身中的位置的位置。

标签: python numpy matplotlib


【解决方案1】:

如果您可以将所需的颜色强度定义为二维函数,则可以使用 plt.imshow() 绘制该函数,然后将流图放在它上面。您只需要线性变换坐标以匹配图像坐标。

这是一个例子:

import numpy as np
import matplotlib.pyplot as plt
plt.rcParams['figure.figsize'] = [10, 10]

# plot 2d function
grid = np.arange(-1, 1, 0.001) 
x, y = np.meshgrid(grid, grid)
z = 1 - (x ** 2 + y ** 2) ** 0.5
plt.imshow(z, cmap='Blues')

# streamplot example from matplotlib docs (modified)
w = 3
Y, X = np.mgrid[-w:w:100j, -w:w:100j]
U = Y ** 2
V = X ** 2 

# transform according to previous plot
n = len(grid) / 2
scale = n / w 
X = (X + w) * scale
Y = (Y + w) * scale
U = (U + w) * scale
V = (V + w) * scale

plt.xticks(ticks=[0, n, 2*n], 
           labels=[-w, 0, w])
plt.yticks(ticks=[0, n, 2*n], 
           labels=[-w, 0, w])
plt.streamplot(X, Y, U, V);

【讨论】:

  • 谢谢,它有助于理解 matplotlib 在绘图能力方面的局限性,我实际上是在寻找不受数学函数约束的东西,而是更多定义着色本身的系统,即着色特定的图案和形状。但我会以此为基础进行更多计算。
  • @YoavTarazy 请尝试更清楚地解释您的需求,因为已经有两个人(Arne 和我)以完全相同的方式误解了您的要求,如果这是选举,我们有 67已经获得了 % 的选票……事实上,你知道你想要什么,我们也知道你知道什么,就像魔法一样,这被称为心灵感应,甚至可能不存在。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-09-22
相关资源
最近更新 更多