밀도도를 만드는 방법
RI에서는 다음을 수행하여 원하는 출력을 생성할 수 있습니다.
data = c(rep(1.5, 7), rep(2.5, 2), rep(3.5, 8),
rep(4.5, 3), rep(5.5, 1), rep(6.5, 8))
plot(density(data, bw=0.5))
파이썬(matplotlib 포함)에서 가장 가까운 것은 간단한 히스토그램입니다.
import matplotlib.pyplot as plt
data = [1.5]*7 + [2.5]*2 + [3.5]*8 + [4.5]*3 + [5.5]*1 + [6.5]*8
plt.hist(data, bins=6)
plt.show()
저도 노름 =을 시도해 보았습니다.참 매개 변수이지만 가우스를 히스토그램에 맞추려고 시도하는 것 이외에는 가져올 수 없습니다.
제가 최근에 시도한 것은scipy.stats
그리고.gaussian_kde
웹의 예를 따르지만, 저는 지금까지 성공하지 못했습니다.
5년 후 구글에서 "파이썬을 사용하여 커널 밀도 플롯을 만드는 방법"을 검색해도 이 스레드는 여전히 맨 위에 표시됩니다!
오늘날, 이것을 하는 훨씬 더 쉬운 방법은 많은 편리한 그리기 기능과 좋은 스타일 관리를 제공하는 패키지인 Seaborn을 사용하는 것입니다.
import numpy as np
import seaborn as sns
data = [1.5]*7 + [2.5]*2 + [3.5]*8 + [4.5]*3 + [5.5]*1 + [6.5]*8
sns.set_style('whitegrid')
sns.kdeplot(np.array(data), bw=0.5)
Sven은 클래스 사용 방법을 보여주었습니다.gaussian_kde
Scipy에서 가져온 것이지만 R로 생성한 것과는 전혀 닮지 않았습니다.그 이유는gaussian_kde
대역폭을 자동으로 추론하려고 합니다.기능을 변경하여 대역폭을 사용할 수 있습니다.covariance_factor
의gaussian_kde
클래스. 첫째, 기능을 변경하지 않고 얻을 수 있는 것은 다음과 같습니다.
그러나 다음 코드를 사용하는 경우:
import matplotlib.pyplot as plt
import numpy as np
from scipy.stats import gaussian_kde
data = [1.5]*7 + [2.5]*2 + [3.5]*8 + [4.5]*3 + [5.5]*1 + [6.5]*8
density = gaussian_kde(data)
xs = np.linspace(0,8,200)
density.covariance_factor = lambda : .25
density._compute_covariance()
plt.plot(xs,density(xs))
plt.show()
알겠습니다
그것은 당신이 R로부터 얻고 있는 것에 꽤 가깝습니다.내가 어쨌길래요? gaussian_kde
변경 가능한 기능을 사용합니다.covariance_factor
대역폭을 계산합니다.함수를 변경하기 전에 이 데이터에 대해 covalance_factor가 반환한 값은 약 .5였습니다.이 값을 낮추면 대역폭이 줄어듭니다.전화를 해야만 했습니다._compute_covariance
모든 요인이 정확하게 계산되도록 함수를 변경한 후.이것은 R의 bw 파라미터와 정확하게 일치하지 않지만, 당신이 올바른 방향으로 가는 데 도움이 되기를 바랍니다.
옵션 1:
사용하다pandas
데이터 프레임 그림(위에 빌드됨)matplotlib
):
import pandas as pd
data = [1.5]*7 + [2.5]*2 + [3.5]*8 + [4.5]*3 + [5.5]*1 + [6.5]*8
pd.DataFrame(data).plot(kind='density') # or pd.Series()
옵션 2:
사용하다distplot
의seaborn
:
import seaborn as sns
data = [1.5]*7 + [2.5]*2 + [3.5]*8 + [4.5]*3 + [5.5]*1 + [6.5]*8
sns.distplot(data, hist=False)
다음과 같은 방법을 시도해 보십시오.
import matplotlib.pyplot as plt
import numpy
from scipy import stats
data = [1.5]*7 + [2.5]*2 + [3.5]*8 + [4.5]*3 + [5.5]*1 + [6.5]*8
density = stats.kde.gaussian_kde(data)
x = numpy.arange(0., 8, .1)
plt.plot(x, density(x))
plt.show()
쉽게 교체할 수 있습니다.gaussian_kde()
다른 커널 밀도 추정치에 의해.
밀도 그림은 matplotlib을 사용하여 만들 수도 있습니다.plt.hist(data) 함수는 밀도도에 필요한 y 및 x 값을 반환합니다(문서 https://matplotlib.org/3.1.1/api/_as_gen/matplotlib.pyplot.hist.html) 참조).따라서 다음 코드는 matplotlib 라이브러리를 사용하여 밀도도를 만듭니다.
import matplotlib.pyplot as plt
dat=[-1,2,1,4,-5,3,6,1,2,1,2,5,6,5,6,2,2,2]
a=plt.hist(dat,density=True)
plt.close()
plt.figure()
plt.plot(a[1][1:],a[0])
이 코드는 다음 밀도 그림을 반환합니다.
다음과 같은 작업을 수행할 수 있습니다.
s = np.random.normal(2, 3, 1000)
import matplotlib.pyplot as plt
count, bins, ignored = plt.hist(s, 30, density=True)
plt.plot(bins, 1/(3 * np.sqrt(2 * np.pi)) * np.exp( - (bins - 2)**2 / (2 * 3**2) ),
linewidth=2, color='r')
plt.show()
언급URL : https://stackoverflow.com/questions/4150171/how-to-create-a-density-plot
'programing' 카테고리의 다른 글
요소에 대한 유형 스크립트에서 여러 CSS 스타일 속성을 설정하는 방법은 무엇입니까? (0) | 2023.07.18 |
---|---|
코코아 포드 설치: 응답 없음 (0) | 2023.07.18 |
SQL Server 2008 Express 데이터베이스에 모든 쿼리를 로깅하시겠습니까? (0) | 2023.07.18 |
Python 문자열의 이스케이프 특수 문자 (0) | 2023.07.18 |
문자열의 시작과 끝에 문자 삽입 (0) | 2023.07.18 |