知行编程网知行编程网  2022-10-17 17:00 知行编程网 隐藏边栏  32 
文章评分 0 次,平均分 0.0
导语: 本文主要介绍了关于Python实用之openpyxl坐标轴范围和对数缩放的相关知识,包括四坐标对数,以及origin对数坐标轴刻度这些编程知识,希望对大家有参考作用。

使用openpyxl时,坐标轴的调整对编辑器来说比较困难。经过一番数据搜索,我不仅解决了这个问题,还找到了一种对数缩放的方法。一起来看看吧~



坐标轴最小和值

为了在图表上显示特定区域,你可以手动设置轴的最小值和值。

<p><span>    from openpyxl import Workbook
    from openpyxl.chart import (
        ScatterChart,
        Reference,
        Series,
    )
    
    wb = Workbook()
    ws = wb.active
    
    ws.append(['X', '1/X'])
    for x in range(-10, 11):
        if x:
            ws.append([x, 1.0 / x])
    
    chart1 = ScatterChart()
    chart1.title = "Full Axes"
    chart1.x_axis.title = 'x'
    chart1.y_axis.title = '1/x'
    chart1.legend = None
    
    chart2 = ScatterChart()
    chart2.title = "Clipped Axes"
    chart2.x_axis.title = 'x'
    chart2.y_axis.title = '1/x'
    chart2.legend = None
    
    chart2.x_axis.scaling.min = 0
    chart2.y_axis.scaling.min = 0
    chart2.x_axis.scaling.max = 11
    chart2.y_axis.scaling.max = 1.5
    
    x = Reference(ws, min_col=1, min_row=2, max_row=22)
    y = Reference(ws, min_col=2, min_row=2, max_row=22)
    s = Series(y, xvalues=x)
    chart1.append(s)
    chart2.append(s)
    
    ws.add_chart(chart1, "C1")
    ws.add_chart(chart2, "C15")
    
    wb.save("minmax.xlsx")<br/></span></p>

Python实用openpyxl轴范围和对数缩放

在某些情况下,如上面的代码所示,设置一个轴范围实际上相当于显示数据的一个子范围。对于大型数据集,当使用 Excel 或 Open/Libre Office 绘制散点图(可能还有其他)时,选择数据子集比设置轴限制更快。



对数缩放

x 和 y 轴都可以对数缩放。对数的底数可以设置为任何有效的浮点数。如果 x 轴是对数缩放的,则该区域的负值将被丢弃。

<p><span>    from openpyxl import Workbook
    from openpyxl.chart import (
        ScatterChart,
        Reference,
        Series,
    )
    import math
    
    wb = Workbook()
    ws = wb.active
    
    ws.append(['X', 'Gaussian'])
    for i, x in enumerate(range(-10, 11)):
        ws.append([x, "=EXP(-(($A${row}/6)^2))".format(row = i + 2)])
    
    chart1 = ScatterChart()
    chart1.title = "No Scaling"
    chart1.x_axis.title = 'x'
    chart1.y_axis.title = 'y'
    chart1.legend = None
    
    chart2 = ScatterChart()
    chart2.title = "X Log Scale"
    chart2.x_axis.title = 'x (log10)'
    chart2.y_axis.title = 'y'
    chart2.legend = None
    chart2.x_axis.scaling.logBase = 10
    
    chart3 = ScatterChart()
    chart3.title = "Y Log Scale"
    chart3.x_axis.title = 'x'
    chart3.y_axis.title = 'y (log10)'
    chart3.legend = None
    chart3.y_axis.scaling.logBase = 10
    
    chart4 = ScatterChart()
    chart4.title = "Both Log Scale"
    chart4.x_axis.title = 'x (log10)'
    chart4.y_axis.title = 'y (log10)'
    chart4.legend = None
    chart4.x_axis.scaling.logBase = 10
    chart4.y_axis.scaling.logBase = 10
    
    chart5 = ScatterChart()
    chart5.title = "Log Scale Base e"
    chart5.x_axis.title = 'x (ln)'
    chart5.y_axis.title = 'y (ln)'
    chart5.legend = None
    chart5.x_axis.scaling.logBase = math.e
    chart5.y_axis.scaling.logBase = math.e
    
    x = Reference(ws, min_col=1, min_row=2, max_row=22)
    y = Reference(ws, min_col=2, min_row=2, max_row=22)
    s = Series(y, xvalues=x)
    chart1.append(s)
    chart2.append(s)
    chart3.append(s)
    chart4.append(s)
    chart5.append(s)
    
    ws.add_chart(chart1, "C1")
    ws.add_chart(chart2, "I1")
    ws.add_chart(chart3, "C15")
    ws.add_chart(chart4, "I15")
    ws.add_chart(chart5, "F30")
    
    wb.save("log.xlsx")<br/></span></p>


这将生成五个类似的图表:

Python实用openpyxl轴范围和对数缩放

五张图使用相同的数据。其中,第一张图不缩放,第二张和第三张图分别在X和Y轴上缩放,第四张图的XY轴被缩放,对数底设置为10;最后一张图 XY 轴已缩放,但对数的底数设置为 e。



轴线方向


坐标轴可以

正常显示

,也可以

反向显示



轴方向由

orientation

属性控制,

minMax

表示正向,

maxMin

表示反向。

<p><span>    from openpyxl import Workbook
    from openpyxl.chart import (
        ScatterChart,
        Reference,
        Series,
    )
    
    wb = Workbook()
    ws = wb.active
    
    ws["A1"] = "Archimedean Spiral"
    ws.append(["T", "X", "Y"])
    for i, t in enumerate(range(100)):
        ws.append([t / 16.0, "=$A${row}*COS($A${row})".format(row = i + 3),
                             "=$A${row}*SIN($A${row})".format(row = i + 3)])
    
    chart1 = ScatterChart()
    chart1.title = "Default Orientation"
    chart1.x_axis.title = 'x'
    chart1.y_axis.title = 'y'
    chart1.legend = None
    
    chart2 = ScatterChart()
    chart2.title = "Flip X"
    chart2.x_axis.title = 'x'
    chart2.y_axis.title = 'y'
    chart2.legend = None
    chart2.x_axis.scaling.orientation = "maxMin"
    chart2.y_axis.scaling.orientation = "minMax"
    
    chart3 = ScatterChart()
    chart3.title = "Flip Y"
    chart3.x_axis.title = 'x'
    chart3.y_axis.title = 'y'
    chart3.legend = None
    chart3.x_axis.scaling.orientation = "minMax"
    chart3.y_axis.scaling.orientation = "maxMin"
    
    chart4 = ScatterChart()
    chart4.title = "Flip Both"
    chart4.x_axis.title = 'x'
    chart4.y_axis.title = 'y'
    chart4.legend = None
    chart4.x_axis.scaling.orientation = "maxMin"
    chart4.y_axis.scaling.orientation = "maxMin"
    
    x = Reference(ws, min_col=2, min_row=2, max_row=102)
    y = Reference(ws, min_col=3, min_row=2, max_row=102)
    s = Series(y, xvalues=x)
    chart1.append(s)
    chart2.append(s)
    chart3.append(s)
    chart4.append(s)
    
    ws.add_chart(chart1, "D1")
    ws.add_chart(chart2, "J1")
    ws.add_chart(chart3, "D15")
    ws.add_chart(chart4, "J15")
    
    wb.save("orientation.xlsx")<br/></span></p>

这将为每个可能的方向组合生成四个带有轴的图表,如下所示:

Python实用openpyxl轴范围和对数缩放


小伙伴们可以根据自己的需求生成不同的图表~更多python实用知识点击进入



本文为原创文章,版权归所有,欢迎分享本文,转载请保留出处!

知行编程网
知行编程网 关注:1    粉丝:1
这个人很懒,什么都没写
扫一扫二维码分享