복붙노트

[PYTHON] Matplotlib 분산 플롯 범례

PYTHON

Matplotlib 분산 플롯 범례

나는 특정 지역에서 다른 온도를 표현하기 위해 4D 분산 그래프를 만들었다. 범례를 만들면 범례에 올바른 기호와 색이 표시되지만 선을 추가합니다. 내가 사용하는 코드는 다음과 같습니다.

colors=['b', 'c', 'y', 'm', 'r']
lo = plt.Line2D(range(10), range(10), marker='x', color=colors[0])
ll = plt.Line2D(range(10), range(10), marker='o', color=colors[0])
l = plt.Line2D(range(10), range(10), marker='o',color=colors[1])
a = plt.Line2D(range(10), range(10), marker='o',color=colors[2])
h = plt.Line2D(range(10), range(10), marker='o',color=colors[3])
hh = plt.Line2D(range(10), range(10), marker='o',color=colors[4])
ho = plt.Line2D(range(10), range(10), marker='x', color=colors[4])
plt.legend((lo,ll,l,a, h, hh, ho),('Low Outlier', 'LoLo','Lo', 'Average', 'Hi', 'HiHi', 'High Outlier'),numpoints=1, loc='lower left', ncol=3, fontsize=8)

Line2D를 Scatter로 바꾸고 흩어 지려고했습니다. Scatter가 오류를 반환하고 분산되어 그래프를 변경하고 오류를 반환했습니다.

분산 형으로 범위 (10)를 데이터 요소가 포함 된 목록으로 변경했습니다. 각 목록에는 x, y 또는 z 변수가 들어 있습니다.

lo = plt.scatter(xLOutlier, yLOutlier, zLOutlier, marker='x', color=colors[0])
ll = plt.scatter(xLoLo, yLoLo, zLoLo, marker='o', color=colors[0])
l = plt.scatter(xLo, yLo, zLo, marker='o',color=colors[1])
a = plt.scatter(xAverage, yAverage, zAverage, marker='o',color=colors[2])
h = plt.scatter(xHi, yHi, zHi, marker='o',color=colors[3])
hh = plt.scatter(xHiHi, yHiHi, zHiHi, marker='o',color=colors[4])
ho = plt.scatter(xHOutlier, yHOutlier, zHOutlier, marker='x', color=colors[4])
plt.legend((lo,ll,l,a, h, hh, ho),('Low Outlier', 'LoLo','Lo', 'Average', 'Hi', 'HiHi',     'High Outlier'),scatterpoints=1, loc='lower left', ncol=3, fontsize=8)

내가 이걸 실행할 때, 전설은 더 이상 존재하지 않는다. 아무 것도없는 구석의 작은 흰색 박스 다.

어떤 충고?

해결법

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

    1.아래 예제 코드에서와 같이 matplotlib.pyplot 모듈의 scatter 메서드를 사용하면 (적어도 matplotlib 1.2.1에서 Python 2.7.5로) 작동해야합니다. 또한 분산 형 플롯을 사용하는 경우 범례 호출에서 numpoints = 1 대신 scatterpoints = 1을 사용하여 각 범례 항목마다 하나의 지점 만 지정하십시오.

    아래 예제 코드에서와 같이 matplotlib.pyplot 모듈의 scatter 메서드를 사용하면 (적어도 matplotlib 1.2.1에서 Python 2.7.5로) 작동해야합니다. 또한 분산 형 플롯을 사용하는 경우 범례 호출에서 numpoints = 1 대신 scatterpoints = 1을 사용하여 각 범례 항목마다 하나의 지점 만 지정하십시오.

    아래의 코드에서 동일한 범위를 반복해서 표시하지 않고 임의의 값을 사용하여 모든 플롯을 표시합니다 (즉, 서로 겹치지 않음).

    import matplotlib.pyplot as plt
    from numpy.random import random
    
    colors = ['b', 'c', 'y', 'm', 'r']
    
    lo = plt.scatter(random(10), random(10), marker='x', color=colors[0])
    ll = plt.scatter(random(10), random(10), marker='o', color=colors[0])
    l  = plt.scatter(random(10), random(10), marker='o', color=colors[1])
    a  = plt.scatter(random(10), random(10), marker='o', color=colors[2])
    h  = plt.scatter(random(10), random(10), marker='o', color=colors[3])
    hh = plt.scatter(random(10), random(10), marker='o', color=colors[4])
    ho = plt.scatter(random(10), random(10), marker='x', color=colors[4])
    
    plt.legend((lo, ll, l, a, h, hh, ho),
               ('Low Outlier', 'LoLo', 'Lo', 'Average', 'Hi', 'HiHi', 'High Outlier'),
               scatterpoints=1,
               loc='lower left',
               ncol=3,
               fontsize=8)
    
    plt.show()
    

    범례는 Axes3D 인스턴스의 scatter 메서드에서 반환되는 Patch3DCollection을 지원하지 않으므로 3D로 산포를 그리려면 plot 메서드를 사용합니다. 마커 스타일을 지정하려면 아래 예제와 같이 메서드 호출의 위치 인수로이를 포함 할 수 있습니다. 선택적으로 linestyle 및 marker 매개 변수에 대한 인수를 포함 할 수 있습니다.

    import matplotlib.pyplot as plt
    from numpy.random import random
    from mpl_toolkits.mplot3d import Axes3D
    
    colors=['b', 'c', 'y', 'm', 'r']
    
    ax = plt.subplot(111, projection='3d')
    
    ax.plot(random(10), random(10), random(10), 'x', color=colors[0], label='Low Outlier')
    ax.plot(random(10), random(10), random(10), 'o', color=colors[0], label='LoLo')
    ax.plot(random(10), random(10), random(10), 'o', color=colors[1], label='Lo')
    ax.plot(random(10), random(10), random(10), 'o', color=colors[2], label='Average')
    ax.plot(random(10), random(10), random(10), 'o', color=colors[3], label='Hi')
    ax.plot(random(10), random(10), random(10), 'o', color=colors[4], label='HiHi')
    ax.plot(random(10), random(10), random(10), 'x', color=colors[4], label='High Outlier')
    
    plt.legend(loc='upper left', numpoints=1, ncol=3, fontsize=8, bbox_to_anchor=(0, 0))
    
    plt.show()
    

  2. from https://stackoverflow.com/questions/17411940/matplotlib-scatter-plot-legend by cc-by-sa and MIT license