source

히스토그램 산점도 행렬 lib

manycodes 2023. 7. 25. 21:10
반응형

히스토그램 산점도 행렬 lib

그래서 저는 약간의 문제가 있습니다.이미 히스토그램 형식의 스파이시 데이터 세트가 있으므로 빈의 중심과 빈당 이벤트 수를 확인할 수 있습니다.이제 히스토그램을 어떻게 표시할 수 있습니까?그냥 하려고 했어요.

bins, n=hist()

하지만 그것은 그것을 좋아하지 않았습니다.추천할 만한 것이 있습니까?

import matplotlib.pyplot as plt
import numpy as np

mu, sigma = 100, 15
x = mu + sigma * np.random.randn(10000)
hist, bins = np.histogram(x, bins=50)
width = 0.7 * (bins[1] - bins[0])
center = (bins[:-1] + bins[1:]) / 2
plt.bar(center, hist, align='center', width=width)
plt.show()

enter image description here

객체 지향 인터페이스는 또한 간단합니다.

fig, ax = plt.subplots()
ax.bar(center, hist, align='center', width=width)
fig.savefig("1.png")

사용자 정의(비 상수) 빈을 사용하는 경우 다음을 사용하여 폭을 계산할 수 있습니다.np.diff폭을 넓히다ax.bar및 사용ax.set_xticks빈 모서리에 레이블을 지정합니다.

import matplotlib.pyplot as plt
import numpy as np

mu, sigma = 100, 15
x = mu + sigma * np.random.randn(10000)
bins = [0, 40, 60, 75, 90, 110, 125, 140, 160, 200]
hist, bins = np.histogram(x, bins=bins)
width = np.diff(bins)
center = (bins[:-1] + bins[1:]) / 2

fig, ax = plt.subplots(figsize=(8,3))
ax.bar(center, hist, align='center', width=width)
ax.set_xticks(bins)
fig.savefig("/tmp/out.png")

plt.show()

enter image description here

막대를 원하지 않는 경우 다음과 같이 플롯할 수 있습니다.

import numpy as np
import matplotlib.pyplot as plt

mu, sigma = 100, 15
x = mu + sigma * np.random.randn(10000)

bins, edges = np.histogram(x, 50, normed=1)
left,right = edges[:-1],edges[1:]
X = np.array([left,right]).T.flatten()
Y = np.array([bins,bins]).T.flatten()

plt.plot(X,Y)
plt.show()

histogram

이것이 당신의 질문에 답하지 않는다는 것을 알지만, 히스토그램에 대한 matplotlib 솔루션을 검색할 때 항상 이 페이지에 나타납니다. 왜냐하면 단순하기 때문입니다.histogram_demomatplotlib 예제 갤러리 페이지에서 제거되었습니다.

여기 솔루션이 있습니다. 이 솔루션은 필요하지 않습니다.numpy수입 예정입니다.데이터를 생성하기 위해 numpy만 가져옵니다.x도식화할@unutbu의 처럼 함수 대신 함수에 의존합니다.

import numpy as np
mu, sigma = 100, 15
x = mu + sigma * np.random.randn(10000)

import matplotlib.pyplot as plt
plt.hist(x, bins=50)
plt.savefig('hist.png')

enter image description here

또한 matplotlib 갤러리와 matplotlib 예제도 확인할 수 있습니다.

문서가 이미 사용 중인 경우 수행할 작업에 대해 명시적이라는 것을 방금 깨달았습니다.np.histogram

counts, bins = np.histogram(data)
plt.hist(bins[:-1], bins, weights=counts)

여기서 중요한 부분은 카운트가 단순히 무게라는 것입니다.그렇게 하면 바 기능이 더 이상 필요 없습니다.

사용할 의사가 있는 경우:

pandas.DataFrame({'x':hist[1][1:],'y':hist[0]}).plot(x='x',kind='bar')

matplotlib 3.4.0 기준

새(또는 )는 다음 항목과 직접 작동합니다.np.histogram:

  • np.histogram카운트 및 에지 반환
  • plt.stairs 카운트 및 에지 허용

예를 들어, 주어진 unutbu의 표본x = 100 + 15 * np.random.randn(10000):

counts, edges = np.histogram(x, bins=50)
plt.stairs(counts, edges, fill=True)
plt.stairs with np.histogram

또는 포장을 풉니다.np.histogram직접:

plt.stairs(*np.histogram(x, bins=50), fill=True)

계단 그림 사용 방법에 대한 자세한 내용은 공식 matplotlib 갤러리를 참조하십시오.

이것은 누군가에게 유용할 수 있습니다.

Numpy의 히스토그램 함수는 빈 값이 아닌 각 빈의 가장자리를 반환합니다.이것은 간격 내에 있을 수 있지만 이산 값 또는 정수(0, 1, 2 등)를 처리할 때 원하는 결과가 아닐 수 있는 부동 소수점 숫자에 적합합니다.특히, np.histogram에서 반환된 빈의 길이는 카운트/밀도의 길이와 같지 않습니다.

이 문제를 해결하기 위해 np.digitiz를 사용하여 입력을 양자화하고 각 빈에 대한 카운트 비율을 계산했습니다.카운트의 정수를 얻기 위해 쉽게 편집할 수 있습니다.

def compute_PMF(data):
    import numpy as np
    from collections import Counter
    _, bins = np.histogram(data, bins='auto', range=(data.min(), data.max()), density=False)
    h = Counter(np.digitize(data,bins) - 1)
    weights = np.asarray(list(h.values())) 
    weights = weights / weights.sum()
    values = np.asarray(list(h.keys()))
    return weights, values
####

참조:

[1] https://docs.scipy.org/doc/numpy/reference/generated/numpy.histogram.html

[2] https://docs.scipy.org/doc/numpy/reference/generated/numpy.digitize.html

언급URL : https://stackoverflow.com/questions/5328556/histogram-matplotlib

반응형