gpt4 book ai didi

python - matplotlib 具有 float 值范围的二维数据

转载 作者:太空宇宙 更新时间:2023-11-03 19:00:49 24 4
gpt4 key购买 nike

我一直在努力让它像我想要的那样工作,但我似乎无法以正确的方式得到它。问题如下,我有一些由 x, y 函数生成的二维数据,我试图将其显示在 pylab.figure 上。

输入数据类似于:

range1_labels = [0.002, 0.006, 0.010, 0.014, 0.018]
range2_labels = [10, 25, 80]
data_values = 2d array with dimensions (len(x_values), len(y_values))

使用 scipy 的 RectBivariateSpline,我生成了 600 x 600 的值,现在我想在 pylab.figure 上显示生成的数据,但在这些间隔中具有 x 和 y 轴标签的值。迄今为止所做的尝试:

    axes = figure.gca()
img = axes.matshow(posteriori_data)
axes.set_title("Interpolated values")
figure.colorbar(img)

axes.set_yticks(range(len(range2_labels)), range2_labels)
axes.set_xticks(range(len(range1_labels)), range1_labels)

此尝试仍然为我提供了两个轴的标签 [0, 100, 200, 300, 400, 500]。

我尝试的另一件事是:

    axes = figure.gca()
img = axes.matshow(posteriori_data, extent=(min(range1_labels), max(range1_labels),
min(range2_labels), max(range2_labels)),
aspect='auto')
axes.set_title("Interpolated values")
figure.colorbar(img)

这似乎更接近我想要的。对于“较大”轴,标签会正确生成,甚至在缩放时也会正确重新计算。因此,在上面的示例中,range2 的标签按预期显示,但没有为 range1 生成标签。

有什么指点吗?

问候

最佳答案

您的问题是您的范围太小,并且刻度定位器无法优雅地处理这个问题。

类似于:

data = rand(600,600)
extent = [.002, .018, 10, 80]

ax = gca()
ax.matshow(data, extent=extent, aspect='auto')
ax.get_xaxis().set_major_locator(matplotlib.ticker.LinearLocator(5))

plt.draw()

会做你想做的事。

深入研究一下,似乎发生了什么,您正在使用 matshow 这是一个为显示矩阵而调整的函数。它设置的定位器是一个 MaxNLocator ,它有一个 integer 标志,强制它仅在整数值上放置刻度 ( doc )。如果您正在绘制矩阵,这是有意义的。在您的情况下,您将范围设置为小于 1,因此您不会得到刻度。

另一种解决方案是使用 imshow

data = rand(600,600)
extent = [.002, .018, 10, 80]

ax = gca()
ax.imshow(data, extent=extent, aspect='auto', interpolation='nearest')

plt.draw()

这就是 matshow 实际上所做的 ( src ),您可以从该实现中复制您想要保留的功能,并删除您不需要的功能。

关于python - matplotlib 具有 float 值范围的二维数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16101450/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com