Для этого пока нет поддержки API, поэтому, если вы хотите, чтобы это было достаточно плохо, вам придется погрузиться до вызовов уровня lxml
, чтобы получить его.
Пример XML для XY-Точечная диаграмма показана в этом python-pptx
аналитическом документе: https://python -pptx.readthedocs.io / en / latest / dev / analysis / cht-xy-chart.html # xml-specimen . Вот частичный фрагмент:
<c:chart>
<c:scatterChart>
<c:ser>
...
<c:xVal>
<c:numRef>
<c:f>Sheet1!$A$2:$A$7</c:f>
<c:numCache>
<c:formatCode>General</c:formatCode>
<c:ptCount val="6"/>
<c:pt idx="0">
<c:v>0.7</c:v>
</c:pt>
<c:pt idx="1">
<c:v>1.8</c:v>
</c:pt>
<c:pt idx="2">
<c:v>2.6</c:v>
</c:pt>
</c:numCache>
</c:numRef>
</c:xVal>
<c:yVal>
<c:numRef>
<c:f>Sheet1!$B$2:$B$7</c:f>
<c:numCache>
<c:formatCode>General</c:formatCode>
<c:ptCount val="6"/>
<c:pt idx="0">
<c:v>2.7</c:v>
</c:pt>
<c:pt idx="1">
<c:v>3.2</c:v>
</c:pt>
<c:pt idx="2">
<c:v>0.8</c:v>
</c:pt>
</c:numCache>
</c:numRef>
</c:yVal>
</c:ser>
...
<c:scatterChart>
...
<c:chart>
Данные о точках разделены между элементом c:xVal
и c:yVal
. Вы можете использовать вызовы XPath
и lxml.etree._Element
, чтобы получить его:
for series in chart.series:
ser = series._ser
x_pts = ser.xpath(".//c:xVal//c:pt")
for pt in x_pts:
print("pt.idx == %s", pt.get("idx"))
str_value = pt.xpath("./c:v")[0].text
value = float(str_value)
print("value == %s" % value)
Вам необходимо расширить этот общий подход, чтобы также получать значения Y, сопоставляя их по парам (x, y) на основепри сопоставлении idx
(не полагайтесь на порядок документов), возможно, отбрасывая любые, которые не образуют полные наборы;Я смутно помню, что это может произойти.