我想用matplotlib制作xy数据的多个hexbin密度图,类似于这个: http ://matplotlib.org/1.4.0/examples/pylab_examples/hexbin_demo.html

但我想将每个六边形的数量除以一个给定的数字(我的密度图中的最高峰值),这样我所有的阴影图都会有相同的颜色,并且所有图的颜色条都是[0,1]范围。

有人能告诉我一个有用的例子吗?

谢谢你的期待,

亚诺什

#1楼 票数:9 已采纳

我看到了两种可能的方法。

方法1

第一种方法是调用hexbin来获取最大值,然后使用reduce_C_function输入选项执行另一个hexbin调用以缩放数据。 执行规范化的问题是,在创建hexbin之前,您不知道每个bin中有多少个点。 使用您链接到的示例中的数据(但仅创建线性比例图),这将是:

plt.subplot(111)
hb = plt.hexbin(x,y, cmap=plt.cm.YlOrRd_r)
plt.cla()
plt.hexbin(x, y,
           C=np.ones_like(y, dtype=np.float) / hb.get_array().max(),
           cmap=plt.cm.YlOrRd_r,
           reduce_C_function=np.sum)
plt.axis([xmin, xmax, ymin, ymax])
cb = plt.colorbar()

在第二个hexbin调用中,您必须提供C数组才能使用reduce_C_function选项。 在这种情况下, C=np.ones_like(y) / hb.get_array().max()就是你所需要的,因为你只需对这些值求和。

请注意,在第一次hexbin调用后清除轴可能是有意义的。

这种方法的一个问题是你将有没有点的空箱(空白区)。 如果您希望背景颜色与零值相同,则可以添加plt.gca().set_axis_bgcolor(plt.cm.YlOrRd_r(0))

方法2

另一种方法是简单地使用hexbin中固有的自动缩放,并简单地重新标记颜色条。 例如:

plt.subplot(111)
hb = plt.hexbin(x,y, cmap=plt.cm.YlOrRd_r)
plt.axis([xmin, xmax, ymin, ymax])
cb = plt.colorbar()
cb.set_ticks(np.linspace(hb.get_array().min(), hb.get_array().max(), 6))
cb.set_ticklabels(np.linspace(0, 1., 6))

请注意,必须以计数为单位使用colorbar tick setter,然后将标签设置在所需的范围内。 就个人而言,我更喜欢第二种方法,因为它更清洁,但我可以想象第一种方法更有用。

#2楼 票数:0

@farenorth的方法2非常好。 也可以使用以下代码来获取hexbin密度图:

cb.set_ticks(np.linspace(hb.get_array().min(), hb.get_array().max(), 6))
cb.set_ticklabels(['%.4f'%x for x in np.linspace(hb.get_array().min()/hb.get_array().sum(), hb.get_array().max()/hb.get_array().sum(), 6)])

  ask by user2393987 translate from so

未解决问题?本站智能推荐:

2回复

从Matlab到Matplotlib的密度图

从几年前开始,我就将matlab用于绘图(主要是密度绘图),但是现在我想更改为matplotlib。 我在尝试弄清楚如何在matplotlib中获得类似图时遇到了问题。 我必须代表一个2D数组。 在matlab中,我曾经使用过surf函数,然后更改为view(2)(az = 0和el =
2回复

matplotlib中的离散密度图

我有一个2D numpy数组,我想用它创建一个离散的密度图。 在图中的每个点(i,j)应该放置一个点,其中颜色应该对应于2D阵列的第(i,j)个元素的值。 我不想使用imshow因为我不想要任何插值,我也想控制要放置的点的大小。
1回复

极坐标中的 Matplotlib 密度图?

我有一个保存为 txt 文件的数组,其中的条目与极坐标中的分布值相对应。 所以它看起来像这样: 我想做一个 f 的密度图(f 越高,我想要颜色越红)。 有没有办法用 matplotlib 做到这一点? 显式代码会有所帮助,因为我对此非常陌生。
1回复

如何更改由matplotlib中的密度着色的散点图的gaussian_kde参数

正如乔·肯顿(Joe Kington)在回答这个问题时所解释的那样: 如何在matplotlib中制作以密度着色的散点图,我如何以密度着色的散点图。 但是,由于我的数据分布复杂,我想更改用于计算密度的参数。 这是带有一些类似于我的假数据的结果: 我想校准gaussian_kde的密度计算
1回复

Matplotlib(Python)规范化数据

好吧,我正在尝试对一些(红外)热成像数据进行归一化,以便稍后显示。 但是我坚持规范化,我当然可以手工完成,但是我想知道为什么matplotlib代码不起作用,python代码如下所示: 现在,我期望vals或img显示正确的处理数据。 取决于实际应获取的matplotlib.co
1回复

如何在Matplotlib中可自定义的位置上设置颜色栏上的枢轴?

我在使用Matplotlib色彩条时遇到了一些麻烦,也许我不了解文档(我不是英语为母语的人)或其核心概念。 假设我有一个数据矩阵(形状,N * 2)。 我想绘制此数据的散点图,并在浮动中添加基于标签(N * 1)列的配色方案。 我知道如何使用colorbar和scalarmappabl
1回复

如何使用Matplotlib在Python中的图上添加/删除曲线

我有一个来自数据的plot ( 密度图 ),用作背景。 我在其上添加了一条线或一条曲线,并且需要通过mouse click更改该曲线的位置。 如何在Python中使用matplotlib做到这一点? 构建图需要花费一些时间,因此我不想redraw整个图 ,仅redraw一条简单的曲
1回复

Matplotlib底图Hexbin动画:清除帧之间的Hexbin

我正在对底图图像上的十六进制热图进行动画处理,但无法在开始下一帧之前弄清楚如何删除以前的十六进制。 我想用一些积累来制作动画,但要按选定的时间间隔进行重置(我的数据具有时间维度,我想逐日显示给定年份的所有点,然后擦除十六进制并显示下一年)。 我想我需要存储该图层,并使用其.remove()方