2017-11-03 1 views
0

주로 음모를 꾸미기 위해 파이썬을 배우려고합니다. 여기 내 예제 코드입니다 :matplotlib을 사용하는 막대 그룹에 서식 지정

import numpy as np 
import matplotlib.pyplot as plt 


a=[[1,2,3,4],[2,3,4,5],[3,4,5,6]] 
x=np.arange(len(a[0])) 
width=0.2 

fig, ax = plt.subplots(figsize=(8,6)) 
patterns=['/','\\','*'] 

for bar in a: 
    ax.bar(x,bar,width,edgecolor='black',color='lightgray', hatch=patterns.pop(0)) 
    x=x+width 

plt.show() 

이제 문제는 내가 모든 바용 블랙 가장자리 색상뿐만 아니라 주어진 해치 후두둑을 필요로한다는 것입니다. 그러나 서식은 첫 번째 막대 집합에만 적용됩니다. 여기에 내 결과가있다. (저는 python3을 사용하고 있습니다).

enter image description here

여기에 무엇을 누락 또는 무슨 잘못? 나는 주변을 둘러 보았지만 어떤 문제도 발견하지 못했습니다.

업데이트 : 나는 python2, python3 및 pdf/png 옵션을 시도했습니다.

  • python2 PDF를 위에 표시 - - this
  • 나는 또한이 참조 - this

  • python3 PDF를 볼 다음 결과

    • 은 python2 PNG --fine
    • python3의 PNG는 '백엔드'를 matplotlib.use('Agg')으로 시도했습니다. 내 matplotlib 버전 (2.1.0)을 업데이트했습니다.

  • 답변

    2

    edgecolor 튜플의 알파 값에 문제가있는 것 같습니다. 1로 설정하면 문제가 해결됩니다.

    +0

    권리를,하지만 난 예 바가 정확히 3 종류, 첫번째 줄이 - 앞으로 슬래시, 두 번째 막대 - 뒤로 슬래시 및 마지막으로 시작됩니다. 팝 (pop) 대신에, 패턴을 쓰면 똑같이 돌아올 것입니다. – novice

    +0

    각 막대의 테두리 색은 어떨까요? – novice

    +0

    itertools 패키지를 사용하면 더 나은 솔루션이 될 수 있습니다. –

    2

    matplotlib 2.1에는 첫 번째 막대의 edgecolor 만 적용되는 current issue이 있습니다. 해치에 대해서도 동일합니다 (this issue 참조). 또한 this question을 참조하십시오.

    python3에는 matplotlib 2.1을 사용할 수 있지만 python2에는 사용할 수없는 경우가 있으므로 python2에서는 사용할 수 있습니다. Python 2에서 matplotlib 2.1로 코드를 실행하면 동일한 바람직하지 않은 동작이 발생합니다.

    matplotlib 2.1.1을 릴리스하면 문제가 해결됩니다. 한편

    는 해결 방법은 edgecolor 및 해치 개별 막대에 설정하는 것입니다 :

    import numpy as np 
    import matplotlib.pyplot as plt 
    
    
    a=[[1,2,3,4],[2,3,4,5],[3,4,5,6]] 
    x=np.arange(len(a[0])) 
    width=0.2 
    
    fig, ax = plt.subplots(figsize=(8,6)) 
    patterns=['/','\\','*'] 
    
    for y in a: 
        bars = ax.bar(x,y,width,color='lightgray') 
        hatch= patterns.pop(0) 
        for bar in bars: 
         bar.set_edgecolor("black") 
         bar.set_hatch(hatch) 
        x=x+width 
    
    plt.show() 
    

    enter image description here