簡體   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