2017-07-12 3 views
0

ich häufig python-pptx verwenden, mit der aktuellen Version von 0.6.6 ....Ist es möglich, zwei Werteachse in Python-pptx zu setzen (eine links, eine rechts)

Jetzt möchte ich einrichten ein Diagramm mit zwei Wert-Achse, eine links, eine rechts, wie folgt:

Im Dokument von Python-Pptx, Value_axis ist Zugriff durch chart.value_axis, aber ich habe keine Beschreibung darüber gefunden, wie um zwei Werteachsen zu setzen (mit einer eigenen Maximum_Scale/Minimum_Scale/Major_Unit).

Irgendwelche Hinweise darauf?

Picture with two value axis

Scanny Antwort Folgen, grabe ich ein wenig in die lxml, aber ich fand es nicht funktionieren (mit Code unten angebracht ist, wollen einfach nur testen, ob die axPos auf r wirksam werden oder nicht). genau wie dieser Beitrag:

Python PPTX Bar Chart negative values

und ich habe das gleiche Problem, wenn ich invert_if_negative Option kann etwas in der lxml Schicht passieren und die Manipulation von lxml Werten macht auf ppt keine Wirkung tun?

if 'import': 
    from pptx import Presentation 
    from pptx.util import * 
    from pptx.chart.data import ChartData 
    from pptx.enum.chart import * 
    import pandas as pd 

if __name__ == '__main__': 

    prs = Presentation()  
    slide = prs.slides.add_slide(prs.slide_layouts[6]) 

    df = pd.DataFrame({'Term': ('1Y', '2Y', '3Y', '4Y', '5Y'), 'A': (2.3, 2.6, 2.7, 2.8, 3.0), 'B': (6, 7.1, 7.5, 6.9, 8)})  

    chart_data = ChartData() 
    chart_data.categories = df.Term 
    seriesA = chart_data.add_series('A', df.A) 
    seriesB = chart_data.add_series('B',df.B) 
# seriesA.invert_if_negative = False 
# seriesB.invert_if_negative = False 

    x, y, cx, cy = Inches(0.5), Inches(2), Inches(8.5), Inches(4.5) 
    chart = slide.shapes.add_chart(XL_CHART_TYPE.LINE, x, y, cx, cy, chart_data).chart  

    cvaxis = chart.value_axis  
    axPos = cvaxis._element.find('{http://schemas.openxmlformats.org/drawingml/2006/chart}axPos') 
    print (axPos.values()) 
    axPos.set('val','r') 
    print (axPos.values()) 

    prs.save('test123.pptx') 

Antwort

0

In python-pptx sind noch keine sekundären Achsen implementiert. Sie müssten Code entwickeln, der das XML unter Verwendung von lxml-Aufrufen manipuliert. Sie können weitere Informationen dazu finden, indem Sie nach "python-pptx workaround function" suchen.

Der grundlegende Kern ist, dass Sie python-pptx verwenden so nah wie möglich an das XML-Element (e) Sie benötigen, zu erhalten und verwenden Sie dann die lxml API „underlying“ python-pptx erledigt den Rest der Arbeit zu bekommen.

+0

Danke scanny, ich ergänze ein wenig in meiner Ursprungsfrage. Ihrem Vorschlag folgend, habe ich versucht mit ein wenig lxml manipuliert, aber keinen Fortschritt gefunden. – lkonweb

Verwandte Themen