2012-09-29 3 views
4

저는 현재 sagemath가 주관하는 온라인 통합 문서를 사용하여 그래프를 만들고 있습니다. 제목, 축 레이블 및 범례를 sagemath에 추가하는 방법은 무엇입니까?

내가 시도하고 그래프를 생성하기 위해 만들고있어 일부 코드의 예입니다

myplot = list_plot(zip(range(20), range(20)), color='red') 
myplot2 = list_plot(zip(range(20), [i*2 for i in range(20)]), color='blue') 
combined = myplot + myplot2 
combined.show() 

그것은 매우 기본적인 - 그것은 본질적으로 서로의 상단에 나란히 놓인 두 개의 산포도를합니다.

축 레이블, 범례 및 선택적으로 제목을 쉽게 추가 할 수있는 방법이 있습니까?

나는 축 레이블을 추가 할 수있는 솔루션을 해킹 할 수 있었지만 실제로보기 흉하고 어리석은 것처럼 보였다.

from matplotlib.backends.backend_agg import FigureCanvasAgg 
def make_graph(plot, labels, figsize=6): 
    mplot = plot.matplotlib(axes_labels=labels, figsize=figsize) 
    mplot.set_canvas(FigureCanvasAgg(mplot)) 
    subplot = mplot.get_axes()[0] 
    subplot.xaxis.set_label_coords(x=0.3,y=-0.12) 
    return mplot 

a = make_graph(combined, ['x axis label', 'y axis label']) 
a.savefig('test.png') 

축 레이블, 범례 및 제목을 추가하는 쉬운 방법이 있습니까?

답변

7

결국 나는 sagemath의 Graphics 개체에 대해 the documentation을 발견했습니다. 나는 완전히 확실하지 않다

myplot = list_plot(
    zip(range(20), range(20)), 
    color='red', 
    legend_label='legend item 1') 

myplot2 = list_plot(
    zip(range(20), [i*2 for i in range(20)]), 
    color='blue', 
    legend_label='legend item 2') 

combined = myplot + myplot2 

combined.axes_labels(['testing x axis', 'testing y axis']) 
combined.legend(True) 

combined.show(title='Testing title', frame=True, legend_loc="lower right") 

을 더 title 방법이 없습니다 왜 제목이 show 내에서 지정해야하는 이유 축이 될 필요가 없습니다 때

나는 이런 식으로해야했다 그러나 이것은 효과가있는 것처럼 보입니다.

+0

제목이 지정되어야하지만 축이 지정되지 않는 이유는 수학자가 제목이없는 축을 사용하는 데 더 많이 사용되기 때문입니다. 제목 옵션은 Sage에 거의 나타나지 않았습니다. http://trac.sagemath.org/sage_trac/ticket/10512를 참조하십시오. 따라서 공개하는 방법에 대한 개선 사항을 기꺼이 검토해 드리겠습니다. – kcrisman

+0

Sage는'show'에서 플롯의 표현에 관한 것들을 넣는 경향이 있습니다. (축을 포함하고 있으므로'axes = True'가 기본값입니다.) 플롯 자체 및/또는 특정 데이터 포인트는 실제로 줄거리, 그것이 의미가있는 경우. – kcrisman

+1

당신은'my_graphics_obj.SHOW_OPTIONS' 사전을 접근/수정함으로써'show' 명령을 위해 나중에 사용될 설정을 설정하고 볼 수 있습니다. – Mark

-1
  • 축 레이블 : myplot.xlabel("text for x axis"), myplot.ylabel("text for y axis")
  • 제목 : myplot.title("My super plot")
  • 설명 : 더에 대한 herethere를 참조 legend()

와 전설을 plot의 호출에 label="Fancy plot" 인수를 추가하고 만들 설명.

+0

불행히도 'xlabel', 'ylabel'및 'title'이 (matplotlib와 약간 다른 것처럼 보이는) Graphics 객체의 멤버가 아니라는 예외가있었습니다. – Michael0x2a

+0

예, Sage 그래픽 객체는 matplotlib 객체가 아닙니다. 객체를 저장할 때 (예 :보기) 우리는 거기에 mpl을 사용합니다. 이렇게하면 mpl을 가져 오지 않고도 물건을 만들 수 있습니다. – kcrisman