我试图使散点图出现在excel (.xlsx
文件)中,并在上面绘制标记,然后单独用不同的颜色填充标记,但没有效果。下面的代码显示了我使用openpyxl
库在Python中尝试过的内容。谢谢你们的帮助!
from openpyxl import Workbook
from openpyxl.chart import (
ScatterChart,
Reference,
Series,
)
from openpyxl.chart.marker import Marker, DataPoint
wb = Workbook()
ws = wb.active
rows = [
("Sample", ),
(1, 10),
(2, 11),
(3, 12),
(4, 13),
(5, 14),
(5, 15),
(6, 16),
(7, 17),
]
for r in rows:
ws.append(r)
c = ScatterChart()
xvalues = Reference(ws, min_col=1, min_row=2, max_row=9)
yvalues = Reference(ws, min_col=2, min_row=2, max_row=9)
series = Series(xvalues, yvalues)
series.marker = Marker('circle', size=10)
series.graphicalProperties.line.noFill = True
pt = DataPoint(idx=5)
pt.graphicalProperties.solidFill = "800000"
series.dPt.append(pt)
c.series.append(series)
ws.add_chart(c, "C1")
wb.save("marker_fill.xlsx")
发布于 2022-01-25 09:09:43
您可以生成多个随机颜色,并将它们分配到图表的各个点。
from random import randint
for i in range(1, len(rows) - 1):
pt = DataPoint(idx=i)
pt.graphicalProperties.solidFill = "%06x" % randint(0, 0xFFFFFF) #random color
series.dPt.append(pt)
发布于 2022-01-25 09:11:31
我还没有找到一种方法来更新散点图上特定标记的填充颜色。然而,我已经找到了一个解决办法来填充标记的颜色,同时绘制它。本质上,我不使用max_row
arg为Reference
方法定义要读取的最后一行,而是迭代数据中的每一行并逐个绘制它,同时在Marker
方法中更新spPr=GraphicalProperties(solidFill=)
arg。
这实际上给出了与以前相同的结果。
from openpyxl import Workbook
from openpyxl.chart import (
ScatterChart,
Reference,
Series,
)
from openpyxl.chart.shapes import GraphicalProperties
from openpyxl.chart.marker import Marker, DataPoint
wb = Workbook()
ws = wb.active
rows = [
("Sample", ),
(1, 10),
(2, 11),
(3, 12),
(4, 13),
(5, 14),
(5, 15),
(6, 16),
(7, 17),
]
marker_colors = [
"800000",
"0000FF",
"800000",
"0000FF",
"FF7F7F",
"800000",
"800000",
"FF7F7F",
]
for r in rows:
ws.append(r)
c = ScatterChart()
for i in range(1, 9):
xvalues = Reference(ws, min_col=1, min_row=i)
yvalues = Reference(ws, min_col=2, min_row=i)
series = Series(xvalues, yvalues)
series.marker = Marker(
'circle',
size=15,
spPr=GraphicalProperties(solidFill=marker_colors[i - 1]))
series.graphicalProperties.line.noFill = True
c.series.append(series)
ws.add_chart(c, "C1")
wb.save("marker_fill.xlsx")
https://stackoverflow.com/questions/70845302
复制相似问题