2017-01-19 3 views
-1

metplotlib.pyplot (이 순간에는 해골이 없습니다)로 7x7 scatterplot 다이어그램을 플롯해야합니다. 반 자동화를 만들려고합니다. 따라서 ax11, ax12, ......, ax77의 배열을 사용하여 서브 플로트를 표시합니다. 그 (것)들을 산란하기 위하여 그 (것)들을 사용할 때, 그것은 거절된다, Python는 그 (것)들을 끈으로 그러나 subplot를위한 키워드 아닙니다 인식한다 것을 나는 의미한다. 오류 메시지는 "AttributeError : 'str'개체에 'scatter'특성이 없습니다. 여기에 코드의 일부는 다음과 같습니다python-'str 'abject에는'scatter '속성이 없습니다.


import matplotlib.pyplot as plt 
import numpy as np 

characters = ['A','B','C','D','E','F'] 

box = dict(facecolor ='yellow', pad = 5, alpha = 0.2) 

fig, ((ax11,ax12,ax13,ax14,ax15,ax16,ax17),\ 
     (ax21,ax22,ax23,ax24,ax25,ax26,ax27),\ 
     (ax31,ax32,ax33,ax34,ax35,ax36,ax37),\ 
     (ax41,ax42,ax43,ax44,ax45,ax46,ax47),\ 
     (ax51,ax52,ax53,ax54,ax55,ax56,ax57),\ 
     (ax61,ax62,ax63,ax64,ax65,ax66,ax67),\ 
     (ax71,ax72,ax73,ax74,ax75,ax76,ax77),\ 
    ) = plt.subplots(7,7) 
fig.subplots_adjust(left = 0.2, wspace =0.2,) 
fig.tight_layout(pad=1, w_pad=2, h_pad=4.0) 
st = fig.suptitle("Scatterplot diagram", \ 
    fontsize="x-  large") 

for i in range(7): 
    for j in range(7): 
     no_ax = str(i)+str(j) 
     nm_ax = "ax"+str(no_ax) 
     nm_ax.scatter(data[caracters[i]],data[caracters[i]]) 
     nm_ax.set_title('xy') 
     nm_ax.set_xlabel('x') 
     nm_ax.set_ylabel('y') 
     continue 

st.set_y(0.95) 
fig.subplots_adjust(top=0.85) 

plt.show() 

나는 올바른 형식으로 문자열을 변환하는 방법이있다 생각하지만, 내가 어떻게 알 수 없습니다. 도와주세요. 감사.

+0

이 코드를 사용하여 달성하려는 작업이 명확하지 않습니다. 주된 이유는 아무도 '데이터'가 무엇인지 알지 못하기 때문입니다. 해당 정보를 제공하고 코드에 '데이터'를 직접 포함하는 것이 좋습니다. 오류를 재현 할 수있는 단순화 된 버전을 사용하십시오. – ImportanceOfBeingErnest

+0

데이터 유형과 관련이 없을 수도 있습니다. 문제는 대개 ax1.scatter ([1,2,3], [1,2,3])를 사용할 때이지만 여기에서는 'ax11'.scatter ([1,2,3], [1,2 ,삼]). 'ax11'문자열을 ax1과 동일한 유형으로 변환해야합니다. 이것은 파이썬이 어떻게 움직이는가입니다. – yuewu008

+0

데이터 유형과 관련이 없습니다. 위에서 말한 것처럼''ax "+ str (no_ax)'는 파이썬 문자열이지만'scatter '를 호출하기 위해서는'Axes' 인스턴스가 필요합니다. 이러한 축 인스턴스를 반복하는 여러 가지 방법이 있습니다. 'matplotlib' 예제를 보면서 몇 가지를 살펴보십시오. 예 : http://matplotlib.org/examples/pylab_examples/subplots_demo.html – tom

답변

0

일반적으로 문자열에서 변수 이름을 작성하는 방법은 피해야합니다. 이 기능은 eval 기능을 사용하여 수행 할 수 있지만 필요한 것은 아닙니다.

문제는 문자열이 scatter 방법이없는

no_ax = str(i)+str(j) #this is a string 
nm_ax = "ax"+str(no_ax) # this is still a string 
nm_ax.scatter(data[caracters[i]],data[caracters[i]]) 
# a string cannot be plotted to 

라인에있다. 필요한 것은 플롯 할 대상이되는 axes 개체입니다.

해결 방법은 루프에서 직접 plt.subplots()에 대한 호출에서 생성 된 축을 사용하는 것입니다.

import matplotlib.pyplot as plt 
import numpy as np 

fig, axes = plt.subplots(ncols=7,nrows=7) 

for i in range(7): 
    for j in range(7): 
     axes[i,j].scatter(np.random.rand(5),np.random.rand(5)) 
     axes[i,j].set_title('{},{}'.format(i,j)) 

plt.show() 
관련 문제