我在数据框列中有一个包含从小到相当大的值的列:大小。我想使用此列作为散点图中的大小,如下所示:
import matplotlib.pyplot as plt
import numpy as np
n = 50
x = np.random.randn(n)
y = x * np.random.randn(n)
fig, ax = plt.subplots(2, figsize=(6, 6))
ax[0].scatter(x, y, s=50)
sizes = (np.random.randn(n) * 8) ** 2
ax[1].scatter(x, y, s=sizes)
fig.show()
Run Code Online (Sandbox Code Playgroud)
标准化列的最佳方法是什么:大小。我尝试记录它,但尺寸看起来太相似了。比例仍应代表原始列中的比例。
这实际上取决于你想通过情节传达什么信息。
如果缩放后的尺寸比例应与原始数据相同,则只能线性缩放尺寸。如果允许非线性缩放,那么您必须决定要在哪里压缩/扩展输入数据,以便在这些区域中输入值的圆的大小x不是输入大小的两倍x/2。
我假设您想要绘制的最大尺寸是 500,即max(sizes)=500输入数据的最大值是 2000,但实际值并不重要。
我创建了一个带有一些选项的图。
对于线性缩放(绿色曲线),您只需找到输入数据的最大值,然后使用 进行缩放sizes=input_data*500/max_val。
您还可以使用该tanh函数的不同变体进行缩放。例如,如果您想用相当小的圆圈绘制低于某个阈值的数据,用较大的圆圈绘制高于该阈值的数据,您可以选择蓝色曲线之类的东西。tanh(x/500-2)*250+250您可以通过更改为 使曲线更加陡峭tanh(x/50-20)*250+250。
tanh 解决方案有一个很好的功能,即非常大的输入值仍然映射到最大尺寸 500。如果您使用抛物线缩放(其中圆的尺寸将无限增长),则此方法不起作用。例如,如果您的输入数据范围从 0 到 10^6,但您只想可视化最多 2000 的变化,并且所有大于 2000 的值都应具有相同的大小,那么 tanh 缩放可以帮助您实现这一目标。
如果没有一些实际数据,很难预测哪种缩放最适合您。
| 归档时间: |
|
| 查看次数: |
1485 次 |
| 最近记录: |