首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >更改散点图上特定标记的填充颜色

更改散点图上特定标记的填充颜色
EN

Stack Overflow用户
提问于 2022-01-25 08:10:47
回答 2查看 342关注 0票数 1

我试图使散点图出现在excel (.xlsx文件)中,并在上面绘制标记,然后单独用不同的颜色填充标记,但没有效果。下面的代码显示了我使用openpyxl库在Python中尝试过的内容。谢谢你们的帮助!

代码语言:javascript
运行
复制
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")
EN

回答 2

Stack Overflow用户

发布于 2022-01-25 09:09:43

您可以生成多个随机颜色,并将它们分配到图表的各个点。

代码语言:javascript
运行
复制
from random import randint
代码语言:javascript
运行
复制
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)
票数 0
EN

Stack Overflow用户

发布于 2022-01-25 09:11:31

我还没有找到一种方法来更新散点图上特定标记的填充颜色。然而,我已经找到了一个解决办法来填充标记的颜色,同时绘制它。本质上,我不使用max_row arg为Reference方法定义要读取的最后一行,而是迭代数据中的每一行并逐个绘制它,同时在Marker方法中更新spPr=GraphicalProperties(solidFill=) arg。

这实际上给出了与以前相同的结果。

代码语言:javascript
运行
复制
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")
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70845302

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档