【问题标题】:Plotting contour lines between a certain range with an accuracy of contour lines to a certain decimal points绘制一定范围之间的等高线,等高线精确到一定的小数点
【发布时间】:2021-12-24 23:25:19
【问题描述】:

我想绘制精度为小数点后七到八位的等高线。我用ax.clabel(contour, inline= True, inline_spacing = -1,fmt = '%1.7f',fontsize=8) 得到了 7 个小数点。 我得到这种轮廓线:

但我希望它显示类似这样的东西,其中大约 0.99、1.01 的等高线以 7 到 8 位的精度显示,我还想绘制 0.99999999 ≤ |G| ≤ 1.00000001

以下是代码块。

khmax = np.arange(0,np.pi,0.01)
Ncmax = np.arange(0,np.pi,0.01)
[X, Y] = np.meshgrid(Ncmax,khmax)
fig, ax = plt.subplots()
contour = plt.contour(X,Y,mod_G)
ax.set_title('magnitude of G')
ax.set_xlabel('Ncmax')
ax.set_ylabel('khmax')
ax.clabel(contour, inline= True, inline_spacing = -1,fmt = '%1.7f',fontsize=8)
plt.show()

任何帮助将不胜感激!

【问题讨论】:

    标签: python numpy matplotlib contour


    【解决方案1】:

    最简单的方法是设置 contourlevels 关键字参数:

    contour = plt.contour(X,Y,mod_G, levels = [0.99999999, 0.999999995, 1.0, 1.000000005, 1.00000001])
    

    或您想要的任何确切级别(请注意,绘制的每条等高线都必须包含在 levels 列表中。我可能建议通过算法创建它,而不是像上面那样手工写出来)

    【讨论】:

    • 我实际上不知道我应该输入什么级别,因为级别可能是 0.9998、0.99000 等等。我只需要问题中给出的范围内的几条轮廓线。我使用了`levels = np.arange(0.99,1.000000001,0.001)`,但等高线似乎非常聚集。如果您可以提出一些建议,或者有什么方法可以使等高线的值等于或小于 1 的区域被着色或标记?
    • 您也可以尝试将levels 设置为整数,它会自动填充均匀分布的轮廓(均匀分布,因为轮廓的值是均匀分布的)
    • 设置整数值会给我等间距的等高线,但是在两个值之间可以做同样的事情吗?我参考了 matplotlib 的文档,其中说“如果是 int n,请使用 MaxNLocator,它会尝试在 vmin 和 vmax 之间自动选择不超过 n+1 个“不错的”轮廓级别。”我不知道如何设置 vmin 和 vmax 的值。
    • 嗯。查看 [Locator](matplotlib.org/stable/api/ticker_api.html) 类的文档。 LinearLocator 可能会有所帮助,或者只是通用的,甚至是MaxNLocator - 看起来如果你创建一个,你可以调用它的view_limits 方法,然后你可以将它作为@ 提供给contour 987654331@关键字参数
    • '将其作为locator 关键字参数提供给contour',您的意思是在轮廓的级别参数中使用它吗?您能否更详细地说明它或编写几行代码作为示例。我尝试使用它,但无法继续。我无法理解如何编写这部分代码。
    猜你喜欢
    • 2022-08-19
    • 2023-02-04
    • 2014-01-25
    • 2011-04-27
    • 2022-01-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-12-10
    相关资源
    最近更新 更多