Matplotlib六边形密度图的对数刻度

5
我在使用对数刻度时遇到了matplotlib hexbin无法工作的困难。
这里是我的一部分数据和一些相关图像。总数组包含6,521个值。
x_data = [1.81, 1.516, 6.985, 5.442, 9.419, 1.014, 0.751, 3.77, 1.337, 7.696, 0.491, 0.63, 0.484, 7.165, 0.343, 2.057, 0.218, 0.485, 3.311, 5.976, 3.904, 0.805, 3.94, 0.579, 2.325, 1.57, 0.759, 1.261, 3.975, 0.944]

y_data = [2.069, 0.076, 2.272, 0.501, 0.536, 4.144, 1.452, 7.798, 1.176, 0.832, 0.133, 0.674, 5.275, 1.87, 0.44, 0.229, 0.396, 1.448, 0.514, 0.646, 3.776, 2.2, 1.588, 1.193, 1.005, 1.181, 0.325, 2.47, 1.766, 0.754]

这是一个将x_data数据按照250个区间分组的直方图。 plt.hist(x_data, bins=250) Histogram]([![enter image description here)

使用普通散点图在对数坐标轴上绘制我的数据没有问题。
plt.scatter(x_data, y_data, alpha=0.05)
plt.xscale('log')
plt.yscale('log')
ax.set_ylim(0.001,100)
ax.set_xlim(0.001,100)

在此输入图像描述 然而,当我尝试实现一个六角形网格时,我得到了类似于这样的结果。我尝试调整gridesize=、bins=和mincnt=等参数,但并没有取得什么进展。

plt.xscale('log')
plt.yscale('log')
ax.set_ylim(0.001,100)
ax.set_xlim(0.001,100)
plt.hexbin(x_data, y_data, gridsize=(150,150), mincnt=2)

enter image description here

我最终尝试使用对数刻度。它的效果与我预期的对数刻度有些相似,但是即使我将x和y轴的最小值设为0.0001,也无法强制轴线低于0.1。

plt.xscale('symlog')
plt.yscale('symlog')
ax.set_ylim(0.0001,100)
ax.set_xlim(0.0001,100)
plt.hexbin(x_data, y_data, gridsize=(150,150), mincnt=2)

enter image description here

任何帮助将不胜感激。

2
我并不惊讶hexbin在对数刻度上无法工作。原因是它使用的特殊转换方式。但是,正是由于这个原因,hexbin有参数“xscale”和“yscale”。你试过使用它们吗? - ImportanceOfBeingErnest
啊!谢谢,我真的没想到使用这些和普通的xscale和yscale会有区别!这解决了问题。 - Stephen Wyka
1个回答

6

我理解您需要将直方图放在对数坐标轴上,而不是正常的坐标轴上。

Matplotlib 提供了三个参数:binsxscaleyscale,它们都可以设置为 log。 如果您希望两个轴都在对数尺度上,可以将 bins='log' 设置为很好的方法。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接