imshow x 轴为对数刻度不是等距的

问题描述 投票:0回答:1

我正在使用

pcolor
生成以下绘图(代码如下)。它有一个对数刻度的
colorbar
,并且 x 值也采用对数刻度。问题是该图中的矩形具有不同的宽度(我放置了一个红色网格以更好地显示矩形,特伦顿的建议)。有什么方法可以确保每个矩形的宽度相同?

import matplotlib.pyplot as plt
from matplotlib.colors import LogNorm
import numpy as np

# Generate Values
x_values = np.geomspace(start=1, stop=1e-2, num=6)
y_values = np.arange(start=0, stop=50, step=4, dtype=int)
x_grid, y_grid = np.meshgrid(x_values, y_values)
z_values = np.random.randn(len(y_values), len(x_values))


fig, ax = plt.subplots()
im = ax.pcolor(x_grid, y_grid, z_values, norm=matplotlib.colors.LogNorm(), ec='r', lw=2)
ax.set_xscale('log')
fig.colorbar(im)
plt.show()
python numpy matplotlib imshow
1个回答
-2
投票

您可以使用比

x_values
y_values
多一个元素的数组手动指定四边形的边。这允许您控制每个“列”的宽度。
image

import matplotlib.pyplot as plt
from matplotlib.colors import LogNorm
import numpy as np

# Generate Values
x_values = np.geomspace(start=1, stop=1e-2, num=6)
x_edges = np.logspace(np.log10(min(x_values)), np.log10(max(x_values)), len(x_values) + 1)  # One more edge
y_values = np.arange(start=0, stop=50, step=4, dtype=int)
y_edges = np.linspace(min(y_values), max(y_values), len(y_values) + 1)  # One more edge
z_values = np.random.randn(len(y_values), len(x_values))

fig, ax = plt.subplots()
im = ax.pcolormesh(x_edges, y_edges, z_values, norm=LogNorm())
ax.set_xscale('log')
fig.colorbar(im)
plt.show()

并且您的代码中不需要这个,因为您已经导入了库

matplotlib.colors.LogNorm()

更改为:

LogNorm()

否则会弹出错误。

© www.soinside.com 2019 - 2024. All rights reserved.