带有次要Y轴的Python openpyxl散点图

问题描述

有没有人有使用散点图在Excel中创建辅助y轴的Python代码示例?即使只是简单的事情,对我也有很大帮助。我正在使用openpyxl在Excel中绘制多个序列,并希望其中一些与左轴关联,而另一些与右轴关联。我尝试从openpyxl Aliens / Humans示例中进行工作,但是它使用了条形图和折线图,但我似乎无法使其适应于散点图。

提前谢谢! 梅利莎(Melissa)

解决方法

散点图看起来很像openpyxl中的折线图,因为散点图只是点与点之间的线的列表。要删除线条,请将线条样式设置为noFill。另外-对于散点图,您需要X坐标的其他一系列数据(Excel中的第1行)。

尝试以下代码:

from openpyxl import Workbook
from openpyxl.chart import (
    LineChart,BarChart,ScatterChart,Reference,Series,)

wb = Workbook()
ws = wb.active

rows = [
    ['Index',1,2,3,4,5,6],# needed as X coordinates for scatter chart
    ['Aliens',6,7],# aliens Y coordinates
    ['Humans',10,40,50,20,50]  # humans Y coordinates
]

for row in rows:
    ws.append(row)


# Aliens
c1 = ScatterChart()

xvalues = Reference(ws,min_col=1,min_row=1,max_col=7)
values = Reference(ws,min_row=2,max_col=7)
series = Series(values,xvalues,title_from_data=True)
c1.series.append(series)

s1 = c1.series[0]
s1.marker.symbol = "triangle"
s1.marker.graphicalProperties.solidFill = "FF0000" # Marker filling
s1.marker.graphicalProperties.line.solidFill = "FF0000" # Marker outline
s1.graphicalProperties.line.noFill = True  # hide lines

c1.style = 13
c1.x_axis.title = 'Days'
c1.y_axis.title = 'Aliens'
c1.y_axis.majorGridlines = None
c1.x_axis.majorGridlines = None
c1.title = 'Survey results'


# Humans
c2 = ScatterChart()

xvalues = Reference(ws,min_row=3,title_from_data=True)
c2.series.append(series)

s2 = c2.series[0]
s2.marker.symbol = "diamond"
s2.marker.graphicalProperties.solidFill = "0000FF" # Marker filling
s2.marker.graphicalProperties.line.solidFill = "0000FF" # Marker outline
s2.graphicalProperties.line.noFill = True  # hide lines

c2.style = 13
c2.x_axis.title = 'Days'
c2.y_axis.title = 'Humans'
c2.y_axis.axId = 200
c2.y_axis.majorGridlines = None
c2.x_axis.majorGridlines = None


# Display y-axis of the second chart on the right by setting it to cross the x-axis at its maximum
c1.y_axis.crosses = "max"
c1 += c2

ws.add_chart(c1,"D4")

wb.save("secondary.xlsx")

输出(在Excel中)

ScatterChart