- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
matplotlib.pyplot.contour()
函数采用 3 个输入数组 X
、Y
和 Z
。
数组 X
和 Y
指定点的 x 和 y 坐标,而 Z
指定感兴趣函数在点数。
我知道 np.meshgrid()
可以轻松生成用作 contour()
参数的数组:
X = np.arange(0,5,0.01)
Y = np.arange(0,3,0.01)
X_grid, Y_grid = np.meshgrid(X,Y)
Z_grid = X_grid**2 + Y_grid**2
plt.contour(X_grid, Y_grid, Z_grid) # Works fine
这很好用。方便的是,这也很好用:
plt.contour(X, Y, Z_grid) # Works fine too
但是,为什么 Z
输入需要是二维数组?
为什么像下面这样的东西是不允许的,即使它指定了所有相同的数据适当对齐?
plt.contour(X_grid.ravel(), Y_grid.ravel(), Z_grid.ravel()) # Disallowed
另外,当指定了only Z
(没有相应的X
和Y
)时,语义是什么? ?
最佳答案
查看the documentation of contour
人们发现有几种方法可以调用此函数,例如contour(Z)
或 contour(X,Y,Z)
。因此您会发现它根本不需要任何 X
或 Y
值。
然而,为了绘制等高线,函数必须知道底层网格。 Matplotlib 的 contour
基于矩形网格。但即便如此,允许 contour(z)
,其中 z
是一维数组,将无法知道应该如何绘制场。在 contour(Z)
的情况下,其中 Z
是一个二维数组,它的形状明确地设置了绘图的网格。
一旦网格已知,可选的X
和Y
数组是否展平就变得不重要了;这实际上是文档告诉我们的内容:
X and Y must both be 2-D with the same shape as Z, or they must both be 1-D such that len(X) is the number of columns in Z and len(Y) is the number of rows in Z.
也很明显plt.contour(X_grid.ravel(), Y_grid.ravel(), Z_grid.ravel())
无法生成等值线图,因为所有关于网格形状的信息都丢失了,没办法轮廓函数可以知道如何解释数据。例如。如果 len(Z_grid.ravel()) == 12
,底层网格的形状可以是 (1,12), (2,6), (3,4), ( 4,3), (6,2), (12,1)
。
一个可能的出路当然是允许一维数组并引入参数 shape
,例如 plt.contour(x,y,z, shape=(6,2) )
。然而,情况并非如此,因此您必须接受 Z
需要是 2D 的事实。
但是,如果您正在寻找一种方法来获得具有扁平(散乱)数组的计数图,则可以使用 plt.tricontour()
.
plt.tricontour(X_grid.ravel(), Y_grid.ravel(), Z_grid.ravel())
此处将使用 Delaunay 三角剖分在内部生成一个三角形网格。因此,即使是完全随机化的点也会产生不错的结果,如下图所示,其中将其与给予 contour
的相同随机点进行比较。
关于python - 为什么 pyplot.contour() 要求 Z 是二维数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42045921/
从 matplotlib 库中我导入了 pyplot 模块。在该模块中有一个我使用过的函数plot()。现在我的问题是: 为什么plot()函数不在任何类中?如果它在任何类中,为什么我们不创建该类的任
过去我可以使用带有 for 循环的 matplotlib 来制作简单的动画,但现在已经有一段时间没用了。 标准答案是您必须打开交互模式和/或使用matplotlib.pyplot.draw()强制重绘
我正在为一个研究项目绘制一些天气数据。该图由 18 个时间步组成。我认为实现此目的的最佳方法是为每个时间步长创建一个新图,将其保存为文件,然后为下一个时间步长创建一个新图(使用 for 循环)。 例如
from matplotlib import pyplot as plt import matplotlib.pyplot as plt 以上说法是否等价?哪种形式更具可读性/更好? 最佳答案 尽管它
我希望负条朝下,正条朝上,x轴(0线)正好在它们之间通过。我试过了 chart = fig.bar(x, negative_data, width=35, color='r') ax2 = plt.g
所以我想要的是让我的 pyplot 以科学记数法记号。所以每个刻度看起来像 1x10^6 而不是 1,然后是轴上的 10^6。到目前为止,我能够做到这一点的唯一方法是手动将每个刻度标签设置为 r'$1
我正在尝试针对 datetime 的列表绘制一些数据pyplot 在 x 轴上的对象。然而,日期显示为标准格式,即 %Y-%m-%d %H:%M:%S (太长了)。我可以通过使用 strftime 创
假设我有这个代码: num_rows = 10 num_cols = 1 fig, axs = plt.subplots(num_rows, num_cols, sharex=True) for i
我正在尝试绘制带有拟合虚线的散点图。 plt.scatter(x, y, s=z, alpha=0.5) m, b = np.polyfit(x, y, 1) y = [(m*i) + b for i
我想在 pyplot 图形中包含一些文本,并且能够在不改变比例的情况下放大它。请参阅下面的情节示例、我希望发生的事情以及实际发生的事情。 重现错误的代码: import matplotlib.pypl
我想显示第一次显示时放大的图像,但仍然可以使用图形工具栏中的交互式“重置原始 View ”按钮缩小到全比例。裁剪是完全 Not Acceptable 。使用 plt.axis([x0, x1, y0,
我正在尝试绘制带有拟合虚线的散点图。 plt.scatter(x, y, s=z, alpha=0.5) m, b = np.polyfit(x, y, 1) y = [(m*i) + b for i
我想在 pyplot 图形中包含一些文本,并且能够在不改变比例的情况下放大它。请参阅下面的情节示例、我希望发生的事情以及实际发生的事情。 重现错误的代码: import matplotlib.pypl
我正在编写一门类(class),以便制作符合我的多种需求的情节人物!我特别关注每个 pyplot 用户都知道的线型的循环(颜色和线型),有 4 种线型('-'、'--'、'-.'、':')但有一个选项
我特别想让其中一行比另一行早结束。它们是按时间顺序排列的(逐月和逐年)。 months= [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16] pass_2015 = [0
给定一个简单的负值列表:l = [0, -1, -1, -1, -10, -100] 使用标准方法 plt.hist(l) 可视化直方图的最快方法是什么? 我希望能够查看列表中的所有条目及其相对频率。
我有一个包含数据的文件,我将其分为三类。我想显示三个不同的“垃圾箱”,它们都只显示一个数字(该类别的平均值)。 import csv import matplotlib.pyplot as plt i
我不确定我的措辞是否正确,但我想做的是创建两个子图的图形,其中两个图有不同的限制,但它们的大小使得物理比例(如,y -人物高度每厘米的距离)是相同的。为了澄清起见,假设子图 1 显示从 -3 到 3
有谁知道为什么这段代码不能正确绘制框颜色。我希望每个组件都有不同的颜色,但它们都是黑色的,带有蓝色图例。 from numpy import array, zeros import matplotli
我在尝试使用 pyplot 标记数据时遇到了一场噩梦。 我目前正在绘制所有数据,如下所示:plt.plot(data)。 data 是一个数组,其中有一列是总成本,其他列是子成本 我想添加图例并适本地
我是一名优秀的程序员,十分优秀!