【问题标题】:Matplotlib Hexbin log scaleMatplotlib Hexbin 对数刻度
【发布时间】:2020-08-03 00:29:32
【问题描述】:

我很难让 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 个 bin 中的直方图。

plt.hist(x_data, bins=250) )

使用普通散点图将我的数据绘制成对数刻度没有问题。

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)

但是,当我尝试实现一个 hexbin 时,我得到了类似的东西。我尝试使用 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)

我终于尝试使用符号量表。它在某种程度上符合我对对数刻度的预期,但即使我将 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)

任何帮助将不胜感激。

【问题讨论】:

  • 我对 hexbin 不能在对数尺度上工作并不感到惊讶。原因是它使用的特殊变换。然而,正是因为这个原因,hexbin 有参数xscaleyscale。你试过用这些吗?
  • 啊!谢谢,我真的没想到使用这些和普通的 xscale 和 yscale 会有区别!这解决了它。

标签: python python-3.x matplotlib


【解决方案1】:

我假设您希望直方图采用对数刻度,而不是轴。

Matplotlib 为您提供了 3 个参数:binsxscaleyscale,它们都可以设置为 log。当您希望两个轴都在对数刻度上时,设置 bins='log' 对我来说非常有用。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-09-29
    • 2014-03-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-02-21
    相关资源
    最近更新 更多