如何将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
相关产品推荐
相关产品推荐

