Python3和OpenPyxl版本2.3.2 如何删除散点图网格线?
from openpyxl.chart.axis import ChartLines
SCchart = ScatterChart()
SCchart.title = "Scatter Chart"
SCchart.style = 13
SCchart.x_axis.majorGridlines = False
给我错误: TypeError:期望的类'openpyxl.chart.axis.ChartLines'
而且:
SCchart.x_axis.ChartLines.majorUnit = False
给出错误:AttributeError:'NumericAxis'对象没有属性'ChartLines' 我想删除所有图表网格线。
答案 0 :(得分:1)
我刚发现一个有效的答案!您不需要导入ChartLines。诀窍是我需要包含另一个类来使线条工作如下:
来自openpyxl.drawing.line导入LineProperties
to filter-map
let List_A [0 1 0 1 1 ]
let List_B [ "residential" "industrial" "commercial" "farmland" "preservation"]
print filter [ i -> i != 0 ] ( map [ [ a b ] -> ifelse-value (a = 1) [b] [0] ] List_A List_B)
end
尝试一下!
答案 1 :(得分:1)
不确定先前的答案是否结束了该主题,但是基于这些建议和一些调整,我能够为折线图启用/禁用网格线,添加数据标签。
使用了以下代码:
from openpyxl.chart.shapes import GraphicalProperties
from openpyxl.drawing.line import LineProperties
from openpyxl.chart.axis import ChartLines
from openpyxl.chart.label import DataLabelList
c1.y_axis.majorGridlines.spPr = GraphicalProperties(noFill = 'True')
c1.y_axis.majorGridlines.spPr.ln = LineProperties(solidFill = '000000')
c1.x_axis.majorGridlines = ChartLines()
c1.x_axis.majorGridlines.spPr = GraphicalProperties(noFill = 'True')
c1.x_axis.majorGridlines.spPr.ln = LineProperties(solidFill = '000000')
c1.dLbls = DataLabelList()
c1.dLbls.showVal = 1
基本上,某些参数1st需要将一个类实例分配给它们,以便更改后续子参数。 对于前。当您尝试为spPr设置值时,抛出的错误将指定期望的类,然后可以导入该类并将其实例分配给该变量(如果可以的话)。除此之外,xml可以极大地帮助您确定哪些变量需要更改。希望对您有所帮助。
答案 2 :(得分:0)
我无法使用Openpyxl 2.51执行此操作,甚至使用一些技巧,例如将网格线设置为白色的背景颜色(十六进制“FFFFFF”)。我可以接近使用openpyxl访问line参数,但不能完全使用它。我在这里包括我的努力,希望其他人能拿起球。 蟒蛇要点:
from openpyxl.chart.shapes import GraphicalProperties
# turn majorGridlines off using shapes.GraphicalProperties
sgp = GraphicalProperties(solidFill='FFFFFF') # White
chart.y_axis.majorGridlines.spPr = sgp
这是openpyxl写的XML:
<valAx>
<axId val="2" />
<scaling>
<orientation val="minMax" />
<min val="0" />
</scaling>
<axPos val="l" />
<majorGridlines>
<spPr>
<a:solidFill>
<a:srgbClr val="FFFFFF" />
</a:solidFill>
<a:ln>
<a:prstDash val="solid" />
</a:ln>
</spPr>
</majorGridlines>
当我打开openpyxl刚用Excel 2010编写的电子表格时,主要的网格线仍然是深灰色。我点击它们并将它们的颜色设置为白色并使用新文件名保存文件。这就是excel如何编写新的xml代码:
<c:valAx>
<c:axId val="83446016"/>
<c:scaling>
<c:orientation val="minMax"/>
<c:min val="0"/>
</c:scaling>
<c:delete val="0"/>
<c:axPos val="r"/>
<c:majorGridlines>
<c:spPr>
<a:ln>
<a:solidFill>
<a:schemeClr val="bg1"/>
</a:solidFill>
<a:prstDash val="solid"/>
</a:ln>
</c:spPr>
</c:majorGridlines>
从逻辑上讲,你可能认为这个python会起作用(剧透,不适合我!):
chart.y_axis.majorGridlines.spPr.ln = sgp
正确的方法(Microsoft使用的方法)是将网格线设置为NoFill。在excel中关闭网格线,保存文件并查看chart.xml文件会产生以下结果:
<c:valAx>
<c:axId val="83031552"/>
<c:scaling>
<c:orientation val="minMax"/>
<c:min val="0"/>
</c:scaling>
<c:delete val="0"/>
<c:axPos val="r"/>
<c:majorGridlines>
<c:spPr>
<a:ln>
<a:noFill/>
<a:prstDash val="solid"/>
</a:ln>
</c:spPr>
</c:majorGridlines>
python就像:
sgp = GraphicalProperties(noFill=True) # bonks, tried None also not effective
chart.y_axis.majorGridlines.spPr.ln = sgp
或者
chart.y_axis.majorGridlines.spPr.ln.noFill = True
也因为这个openpyxl路径中没有ln或line而出现问题。