日志刻度中不正确的mpld3绘图

0 投票
1 回答
778 浏览
提问于 2025-04-18 16:26

我在使用mpld3绘图时发现了一个很奇怪的现象。我做了三件事:1. 直接用线性刻度绘制数据。2. 用线性刻度绘制数据的log10值。3. 用对数刻度绘制原始数据。第二个和第三个图应该看起来一样,但实际上并不是。第三个图的y轴似乎是反向的。

选项1。

import numpy as np
import matplotlib
import matplotlib.pyplot as plt
import mpld3
from mpld3 import plugins, utils

x = [1, 10, 100, 1000]
y = [1, 10, 100, 1000]

fig = plt.figure()
ax = fig.add_subplot(111)
ax.scatter(x, y, s=25, c='orange')
#ax.scatter(np.log10(x), np.log10(y), s=25, c='orange')
#ax.set_xscale('log')
#ax.set_yscale('log')
plugins.connect(fig, plugins.MousePosition())
mpld3.show()

选项2。

#ax.scatter(x, y, s=25, c='orange')
ax.scatter(np.log10(x), np.log10(y), s=25, c='orange')
#ax.set_xscale('log')
#ax.set_yscale('log')

选项3。

ax.scatter(x, y, s=25, c='orange')
#ax.scatter(np.log10(x), np.log10(y), s=25, c='orange')
ax.set_xscale('log')
ax.set_yscale('log')

我是不是漏掉了什么,还是这可能是个bug?页面中包含的JSON数据似乎包含了ylim和ydomain等信息,按理说应该没问题,所以我对这个图表的反向感到非常困惑。

1 个回答

1

一个可能的解决办法是用 plot 来画点,而不是用 scatter。这个问题似乎只出现在 scatter 函数上。所以,不要这样:

ax.scatter(x, y)

而是用这个:

ax.plot(x, y, marker='o', linestyle='')

撰写回答