[PYTHON] matplotlib을 사용하여 두 개의 히스토그램을 동시에 플롯합니다.
PYTHONmatplotlib을 사용하여 두 개의 히스토그램을 동시에 플롯합니다.
파일의 데이터를 사용하여 히스토그램 플롯을 만들었고 문제가 없습니다. 이제는 데이터의 중첩을 원했습니다. 같은 히스토그램에있는 다른 파일, 그래서 나는
n,bins,patchs = ax.hist(mydata1,100)
n,bins,patchs = ax.hist(mydata2,100)
문제는 각 간격마다 가장 높은 값을 가진 막대 만 나타나고 다른 막대는 숨겨져 있다는 것입니다. 서로 다른 색상으로 두 히스토그램을 어떻게 동시에 그릴 수 있을지 궁금합니다.
해결법
-
==============================
1.여기에 실제 예제가 있습니다.
여기에 실제 예제가 있습니다.
import random import numpy from matplotlib import pyplot x = [random.gauss(3,1) for _ in range(400)] y = [random.gauss(4,2) for _ in range(400)] bins = numpy.linspace(-10, 10, 100) pyplot.hist(x, bins, alpha=0.5, label='x') pyplot.hist(y, bins, alpha=0.5, label='y') pyplot.legend(loc='upper right') pyplot.show()
-
==============================
2.허용 된 답변은 겹치는 막대가있는 막대 그래프 코드를 제공하지만 각 막대가 나란히 배치되도록하려는 경우 다음과 같은 변형을 시도하십시오.
허용 된 답변은 겹치는 막대가있는 막대 그래프 코드를 제공하지만 각 막대가 나란히 배치되도록하려는 경우 다음과 같은 변형을 시도하십시오.
import numpy as np import matplotlib.pyplot as plt plt.style.use('seaborn-deep') x = np.random.normal(1, 2, 5000) y = np.random.normal(-1, 3, 2000) bins = np.linspace(-10, 10, 30) plt.hist([x, y], bins, label=['x', 'y']) plt.legend(loc='upper right') plt.show()
참조 : http://matplotlib.org/examples/statistics/histogram_demo_multihist.html
EDIT [2018/03/16] : @stochastic_zeitgeist에서 제안한 것과 같이 다양한 크기의 배열을 플로팅 할 수 있도록 업데이트되었습니다.
-
==============================
3.샘플 크기가 다른 경우 배포본을 단일 y 축과 비교하는 것이 어려울 수 있습니다. 예 :
샘플 크기가 다른 경우 배포본을 단일 y 축과 비교하는 것이 어려울 수 있습니다. 예 :
import numpy as np import matplotlib.pyplot as plt #makes the data y1 = np.random.normal(-2, 2, 1000) y2 = np.random.normal(2, 2, 5000) colors = ['b','g'] #plots the histogram fig, ax1 = plt.subplots() ax1.hist([y1,y2],color=colors) ax1.set_xlim(-10,10) ax1.set_ylabel("Count") plt.tight_layout() plt.show()
이 경우 서로 다른 축에 두 데이터 세트를 플로팅 할 수 있습니다. 이렇게하려면 matplotlib을 사용하여 히스토그램 데이터를 가져 와서 축을 지우고 두 개의 별도 축 (다시 겹치지 않도록 bin 가장자리를 이동)에 다시 그립니다.
#sets up the axis and gets histogram data fig, ax1 = plt.subplots() ax2 = ax1.twinx() ax1.hist([y1, y2], color=colors) n, bins, patches = ax1.hist([y1,y2]) ax1.cla() #clear the axis #plots the histogram data width = (bins[1] - bins[0]) * 0.4 bins_shifted = bins + width ax1.bar(bins[:-1], n[0], width, align='edge', color=colors[0]) ax2.bar(bins_shifted[:-1], n[1], width, align='edge', color=colors[1]) #finishes the plot ax1.set_ylabel("Count", color=colors[0]) ax2.set_ylabel("Count", color=colors[1]) ax1.tick_params('y', colors=colors[0]) ax2.tick_params('y', colors=colors[1]) plt.tight_layout() plt.show()
-
==============================
4.다음은 데이터의 크기가 다른 두 막대 그래프가 나란히있는 두 개의 막대 그래프를 같은 플롯에 플롯하는 간단한 방법입니다.
다음은 데이터의 크기가 다른 두 막대 그래프가 나란히있는 두 개의 막대 그래프를 같은 플롯에 플롯하는 간단한 방법입니다.
def plotHistogram(p, o): """ p and o are iterables with the values you want to plot the histogram of """ plt.hist([p, o], color=['g','r'], alpha=0.8, bins=50) plt.show()
-
==============================
5.막대 그래프 만 원하는 것 같습니다.
막대 그래프 만 원하는 것 같습니다.
또는 하위 그림을 사용할 수 있습니다.
-
==============================
6.Pandas (pdf로 pandas를 가져옴)를 사용하거나 Pandas를 사용하는 것이 좋습니다.
Pandas (pdf로 pandas를 가져옴)를 사용하거나 Pandas를 사용하는 것이 좋습니다.
test = pd.DataFrame([[random.gauss(3,1) for _ in range(400)], [random.gauss(4,2) for _ in range(400)]]) plt.hist(test.values.T) plt.show()
-
==============================
7.hist의 bin 반환 값을 사용해야합니다.
hist의 bin 반환 값을 사용해야합니다.
import numpy as np import matplotlib.pyplot as plt foo = np.random.normal(loc=1, size=100) # a normal distribution bar = np.random.normal(loc=-1, size=10000) # a normal distribution _, bins, _ = plt.hist(foo, bins=50, range=[-6, 6], normed=True) _ = plt.hist(bar, bins=bins, alpha=0.5, normed=True)
from https://stackoverflow.com/questions/6871201/plot-two-histograms-at-the-same-time-with-matplotlib by cc-by-sa and MIT license
'PYTHON' 카테고리의 다른 글
[PYTHON] SQLAlchemy : 실제 쿼리 인쇄 (0) | 2018.10.09 |
---|---|
[PYTHON] 내 장고 요청에서 내 JSON 데이터는 어디에 있습니까? (0) | 2018.10.09 |
[PYTHON] Python의 속성에 따라 객체 인스턴스를 비교합니다. (0) | 2018.10.09 |
[PYTHON] Spark에서 INFO 로깅을 끄는 방법은 무엇입니까? (0) | 2018.10.09 |
[PYTHON] 파이썬에서 캐치되지 않은 예외를 로깅하기 (0) | 2018.10.09 |