繁体   English   中英

Matplotlib - 以 Y 轴为累积分数的累积密度图

[英]Matplotlib - cumulative density plot with Y-axis as cumulative fraction

我可以制作一个累积密度图( 累积分布图 python ):

import numpy as np
import matplotlib.pyplot as plt

# Some fake data:
data = np.random.randn(1000)

sorted_data = np.sort(data)  # Or data.sort(), if data can be modified

# Cumulative counts:
plt.step(np.concatenate([sorted_data, sorted_data[[-1]]]),
         np.arange(sorted_data.size+1))

plt.show()

但是,我希望将 Y 轴表示为累积分数。 0 到 1 之间的某个值。如何缩放 Y 轴来执行此操作?

解决方案

请参阅下面欧内斯特的回答。 如果使用 Python 2:

plt.step(np.concatenate([sorted_data, sorted_data[[-1]]]), np.arange(sorted_data.size+1)/float(sorted_data.size))

不要让事情过于复杂,只需除以您拥有的数据数量

import numpy as np
import matplotlib.pyplot as plt

# Some fake data:
data = np.random.randn(1000)

sorted_data = np.sort(data)  # Or data.sort(), if data can be modified

# Cumulative counts:
plt.step(np.concatenate([sorted_data, sorted_data[[-1]]]),
         np.arange(sorted_data.size+1)/sorted_data.size)

plt.show()

在此处输入图片说明

通常,您可以通过从最小值中减去您的值并除以最大值和最小值之间的差来使用最小值-最大值缩放。

y = np.arange(sorted_data.size+1)
# Using min-max scaling
y = (y - np.min(y)) / (np.max(y) - np.min(y))

由于在这种情况下y的最小值为 0,这与除以 y 值的最大值相同。

plt.step(np.concatenate([sorted_data, sorted_data[[-1]]]),
     y / np.max(y))

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM