You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将KDE2D绘图的坐标轴从变量索引改为对应变量值?

问题:将二维核密度估计图的坐标轴替换为实际变量值

我参考二维核密度估计示例计算随机(x,y)数据的密度,代码如下:

from numpy.random import normal
x = normal(size=1000)
y = normal(size=1000)

# Estimate density within ±5 standard deviations.
from kde_diffusion import kde2d
(density, grid, bandwidth) = kde2d(x, y, n=32, limits=None)

# Display estimated density as image.
from matplotlib import pyplot
figure = pyplot.figure()
axes = figure.add_subplot()
axes.imshow(density.T)
pyplot.show()

生成的图中x、y轴显示的是grid数组(包含32个x变量的array0、32个y变量的array1)的索引,请问如何将x、y轴显示为array0和array1中的对应变量值?


解决方案

只需要通过Matplotlib的刻度设置方法,将轴的刻度位置和标签替换为grid中的实际变量值即可。修改后的代码如下:

from numpy.random import normal
x = normal(size=1000)
y = normal(size=1000)

from kde_diffusion import kde2d
(density, grid, bandwidth) = kde2d(x, y, n=32, limits=None)

from matplotlib import pyplot
figure = pyplot.figure()
axes = figure.add_subplot()

# 提取grid中的x、y变量数组
x_grid, y_grid = grid

# 绘制密度图,指定轴范围并修正原点方向
axes.imshow(
    density.T,
    extent=[x_grid.min(), x_grid.max(), y_grid.min(), y_grid.max()],
    origin='lower'
)

# 挑选关键刻度位置,避免标签重叠
tick_positions = [0, 8, 16, 24, 31]
axes.set_xticks([x_grid[i] for i in tick_positions])
axes.set_yticks([y_grid[i] for i in tick_positions])

# 添加轴标签
axes.set_xlabel('X变量')
axes.set_ylabel('Y变量')

pyplot.show()

核心细节说明:

  • extent参数:直接定义图像对应的x、y轴实际范围,让Matplotlib匹配像素与真实坐标的映射关系。
  • origin='lower':修正imshow默认的左上角原点,让y轴方向符合常规数据从下到上递增的逻辑。
  • 筛选刻度:直接显示32个刻度会导致标签重叠,挑选间隔较大的索引对应的变量值作为刻度,保证图表可读性。

内容的提问来源于stack exchange,提问作者httpsn

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.20 14:27:30