gpt4 book ai didi

python - 如何控制 pyplot pcolor 热图的单元格大小?

转载 作者:行者123 更新时间:2023-11-30 23:07:21 26 4
gpt4 key购买 nike

我有一对代表二维空间中的点的数字列表,我想将这些点的 y/x 比率表示为一维热图,并以 1 为中心的发散颜色图,或者我的比率的对数,发散的颜色图以 0 为中心。

我该怎么做?

我当前的尝试(借鉴 Heatmap in matplotlib with pcolor? ):

from matplotlib import numpy as np
import matplotlib.pyplot as plt
# There must be a better way to generate arrays of random values
x_values = [np.random.random() for _ in range(10)]
y_values = [np.random.random() for _ in range(10)]
labels = list("abcdefghij")
ratios = np.asarray(y_values) / np.asarray(x_values)
axis = plt.gca()
# I transpose the array to get the points arranged vertically
heatmap = axis.pcolor(np.log2([ratios]).T, cmap=plt.cm.PuOr)
# Put labels left of the colour cells
axis.set_yticks(np.arange(len(labels)) + 0.5, minor=False)
# (Not sure I get the label order correct...)
axis.set_yticklabels(labels)
# I don't want ticks on the x-axis: this has no meaning here
axis.set_xticks([])
plt.show()

我不满意的几点:

  • 我获得的彩色单元格是水平拉长的矩形。我想控制这些单元格的宽度并获得一列单元格。
  • 我想为彩色图添加图例。 heatmap.colorbar = plt.colorbar() 失败,并出现 RuntimeError: 未找到可用于创建颜色条的可映射对象。首先定义一个可映射的对象,例如图像(使用 imshow)或轮廓集(使用轮廓f)。

重要的一点:

  • matplotlib/pyplot 总是让我感到困惑:似乎有很多方法可以做事,但我却迷失在文档中。我永远不知道什么是“干净”的方式来做我想做的事:我欢迎阅读 Material 的建议,这将帮助我澄清我对这些事情的大致理解。

最佳答案

只需再添加 2 行:

axis.set_aspect('equal') # X scale matches Y scale
plt.colorbar(mappable=heatmap) # Tells plt where it should find the color info.

无法很好地回答你的最后一个问题。部分原因是我们在 matplotlib 中有两个处理分支:轴方式 (axis.do_something...) 和 MATLAB > 克隆方式plt.some_plot_method。不幸的是我们无法改变这一点,对于人们迁移到 matplotlib 来说这是一个很好的功能。就“干净的方式”而言,我更喜欢使用生成较短代码的任何方式。我想这符合 Python 的座右铭:简单胜于复杂可读性重要

enter image description here

关于python - 如何控制 pyplot pcolor 热图的单元格大小?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32256586/

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