복붙노트

[PYTHON] matplotlib에서 밀도로 채색 된 분산 형 플롯을 만들려면 어떻게해야합니까?

PYTHON

matplotlib에서 밀도로 채색 된 분산 형 플롯을 만들려면 어떻게해야합니까?

나는 각 점이 가까운 점의 공간 밀도에 의해 착색되는 산점도를 만들고 싶습니다.

나는 R을 사용하는 예제를 보여주는 매우 비슷한 질문을 발견했다.

R Scatter Plot : 심볼 색상은 겹치는 점의 수를 나타냅니다.

matplotlib를 사용하여 파이썬에서 비슷한 것을 달성하는 가장 좋은 방법은 무엇입니까?

해결법

  1. ==============================

    1.@askewchan이 제안한 hist2d 나 hexbin 외에, 링크 된 질문에서 받아 들인 대답이 사용하는 것과 같은 방법을 사용할 수 있습니다.

    @askewchan이 제안한 hist2d 나 hexbin 외에, 링크 된 질문에서 받아 들인 대답이 사용하는 것과 같은 방법을 사용할 수 있습니다.

    그렇게하고 싶다면 :

    import numpy as np
    import matplotlib.pyplot as plt
    from scipy.stats import gaussian_kde
    
    # Generate fake data
    x = np.random.normal(size=1000)
    y = x * 3 + np.random.normal(size=1000)
    
    # Calculate the point density
    xy = np.vstack([x,y])
    z = gaussian_kde(xy)(xy)
    
    fig, ax = plt.subplots()
    ax.scatter(x, y, c=z, s=100, edgecolor='')
    plt.show()
    

    포인트가 밀도 순서대로 플롯되어 가장 밀도가 높은 점이 항상 위에 놓 이도록하려면 (링크 된 예제와 유사하게) z 값으로 정렬하면됩니다. 조금 더 잘 보이기 때문에 작은 마커 크기를 사용하려고합니다.

    import numpy as np
    import matplotlib.pyplot as plt
    from scipy.stats import gaussian_kde
    
    # Generate fake data
    x = np.random.normal(size=1000)
    y = x * 3 + np.random.normal(size=1000)
    
    # Calculate the point density
    xy = np.vstack([x,y])
    z = gaussian_kde(xy)(xy)
    
    # Sort the points by density, so that the densest points are plotted last
    idx = z.argsort()
    x, y, z = x[idx], y[idx], z[idx]
    
    fig, ax = plt.subplots()
    ax.scatter(x, y, c=z, s=50, edgecolor='')
    plt.show()
    

  2. ==============================

    2.히스토그램을 만들 수 있습니다.

    히스토그램을 만들 수 있습니다.

    import numpy as np
    import matplotlib.pyplot as plt
    
    # fake data:
    a = np.random.normal(size=1000)
    b = a*3 + np.random.normal(size=1000)
    
    plt.hist2d(a, b, (50, 50), cmap=plt.cm.jet)
    plt.colorbar()
    

  3. from https://stackoverflow.com/questions/20105364/how-can-i-make-a-scatter-plot-colored-by-density-in-matplotlib by cc-by-sa and MIT license