这个折线图:

  • 不同样式虚线做数据线:chart.lines[i].strokeDashArray

  • 虚线截小段做图例的色块:

LineLegend,legend.colorNamePairs = Auto(obj = chart)

  • y轴将给的数据放大1000倍:chart.yValueAxis.labelTextScale

  • x轴刻度标签旋转90度:chart.xValueAxis.labels.angle

  • 设定x轴上标签的显示格式:

chart.yValueAxis.labelTextFormat

代码及注释:

# 不同样式的数据折线以及指定坐标轴上标签的数据格式from reportlab.graphics.charts.lineplots import LinePlotfrom reportlab.lib.colors import PCMYKColorfrom reportlab.graphics.charts.legends import LineLegendfrom reportlab.graphics.shapes import Drawing, _DrawingEditorMixin, Linefrom reportlab.lib.validators import Autofrom reportlab.lib.styles import blackfrom reportlab.graphics.charts.axes import XValueAxis, YValueAxis, AdjYValueAxis, NormalDateXValueAxisclass LineChart_DashedLinesNumberFormates(_DrawingEditorMixin,Drawing):    def __init__(self,width=558,height=140,*args,**kw):        Drawing.__init__(self,width,height,*args,**kw)        # 公共变量        fontName = 'Helvetica'      # 字体        strokeWidth = 0.5           # 线宽        dashArray = (0.3,1)         # 虚线样式        lineCap = 1                 # 线头样式:0尖头、1圆头、2方头        overShoot = 7.5             # 超出部分        # 添加折线图表        self._add(self,LinePlot(),name='chart',validate=None,desc=None)        # 设置x坐标轴        self.chart.xValueAxis = NormalDateXValueAxis()        # x轴是个日期轴        self.chart.xValueAxis.labels.fontName       = fontName        # 日期轴上标签字体        self.chart.xValueAxis.labels.fontSize       = 6        # 日期轴上标签大小        self.chart.xValueAxis.labels.boxAnchor      ='autox'        # 锚点,默认是'n';'autox'能找到的资料仅一条,说是自适应标签框        self.chart.xValueAxis.labels.angle          = 90        # 标签旋转90度        self.chart.xValueAxis.labels.rightPadding   = 2        # 标签框的右留白        self.chart.xValueAxis.xLabelFormat          = '{mm}/{dd}/{yy}'        # 标签上的日期格式:月/日/年        self.chart.xValueAxis.strokeDashArray       = dashArray        # x轴和x轴上刻度线的样式,但似乎日期线不受约束        self.chart.xValueAxis.strokeLineCap         = lineCap        # 线头样式        self.chart.xValueAxis.strokeWidth = 0.5        # 线的宽度        self.chart.xValueAxis.maximumTicks          = 20        # 刻度可以有的最大个数        self.chart.xValueAxis.forceFirstDate        = 1        # 显示数据中的第一个日期        self.chart.xValueAxis.forceEndDate          = 1        # 显示最后一个日期        self.chart.xValueAxis.dailyFreq             = 0        # 为真时数轴上的刻度是每月最后一天        self.chart.xValueAxis.minimumTickSpacing    = 15        # 刻度间距离的最小值        self.chart.xValueAxis.visible = 1        # x轴可见        self.chart.xValueAxis.visibleGrid = 0        # x轴上的刻度格线不可见        self.chart.xValueAxis.gridStrokeWidth = 0.25        # 如果有刻度格线的话刻度线的宽度        self.chart.xValueAxis.visibleTicks = 1        # x轴上的刻度可见        # y axis        self.chart.yValueAxis.labels.fontName       = fontName        # y轴上的标签字体        self.chart.yValueAxis.labels.fontSize       = 6        # y轴上的标签字体大小        self.chart.yValueAxis.labelTextFormat       = '$%0.2f'        # y轴上标签格式,前面加一个$,小数点后两位数字的实数        self.chart.yValueAxis.labels.rightPadding   = 7        # 标签右留白        self.chart.yValueAxis.strokeWidth           = 0.5        # y轴线宽        self.chart.yValueAxis.strokeDashArray = dashArray        # y轴线的样式        self.chart.yValueAxis.strokeLineCap         = lineCap        # 线头样式        self.chart.yValueAxis.maximumTicks          = 15        self.chart.yValueAxis.rangeRound            ='both'        # OneOf('none','both','ceiling','floor'),'How to round the axis limits'        # 刻度的最高最低怎么取,ceiling是进最近的那个最大的,floor是最近的那个最小的        self.chart.yValueAxis.avoidBoundFrac        = 0.1        # 间隔、最上和最下都受这个值的影响,可以切换成其他值感受一下它的影响        # 源代码上的注释:Fraction of interval to allow above and below.        # self.chart.yValueAxis.avoidBoundFrac        = 1        # self.chart.yValueAxis.avoidBoundFrac        = 2        # self.chart.yValueAxis.avoidBoundFrac        = 3        # self.chart.yValueAxis.avoidBoundFrac        = 5        self.chart.yValueAxis.visibleGrid           = 1        # 显示y轴上的刻度格线,接着设定刻度格线的宽度、样式和线头        self.chart.yValueAxis.gridStrokeWidth       = strokeWidth        self.chart.yValueAxis.gridStrokeDashArray   = dashArray        self.chart.yValueAxis.gridStrokeLineCap     = lineCap        self.chart.yValueAxis.visibleAxis           = 1        # 显示y轴        self.chart.yValueAxis.labelTextScale          = 1000        # 将y值扩大1000倍标在y坐标轴上        self.chart.yValueAxis.tickLeft                = 0        # 刻度线左伸出为0        # legend        self._add(self,LineLegend(),name='legend',validate=None,desc=None)        self.legend.colorNamePairs   =  Auto(obj=self.chart)        # 图例开启自动模式,用数据线上的一小段做色块,一一对应chart.lines各数据线的名字name属性        self.legend.fontName         = fontName        self.legend.fontSize         = 7        self.legend.alignment        ='right'        # 文字在色块右边        self.legend.columnMaximum    = 1        # 每列最多一行        self.legend.dxTextSpace      = 5        # 文字与色块的距离        self.legend.variColumn       = 1        # 列宽可变        self.legend.autoXPadding     = 15        # deltax=None时,x方向的列间留白        # 折线上的数据列表,包括三个元素列表,每个元素列表里包括一组数据        # 三组数据三条数据线        self.chart.data = [[(20070201, 1.0), (20070228, 1.0089999999999999), (20070331, 1.0264), (20070430, 1.0430999999999999), (20070531, 1.0649), (20070630, 1.0720000000000001), (20070731, 1.0742), (20070831, 1.0553999999999999), (20070930, 1.0713999999999999), (20071031, 1.1031), (20071130, 1.093), (20071231, 1.1005), (20080131, 1.0740000000000001)],                           [(20070201, 1.0), (20070228, 1.0154000000000001), (20070331, 1.0155000000000001), (20070430, 1.0208999999999999), (20070531, 1.0132000000000001), (20070630, 1.0101), (20070731, 1.0185), (20070831, 1.0309999999999999), (20070930, 1.0388999999999999), (20071031, 1.0482), (20071130, 1.0670999999999999), (20071231, 1.0701000000000001), (20080131, 1.0880000000000001)],                           [(20070201, 1.0), (20070228, 1.0089999999999999), (20070331, 1.0182), (20070430, 1.0311999999999999), (20070531, 1.0471999999999999), (20070630, 1.0518000000000001), (20070731, 1.0532999999999999), (20070831, 1.0344), (20070930, 1.0470999999999999), (20071031, 1.0699000000000001), (20071130, 1.0613999999999999), (20071231, 1.0621), (20080131, 1.0455000000000001)]]        # 颜色列表        self._colorsList = [PCMYKColor(23,51,0,4), PCMYKColor(66,13,0,22), PCMYKColor(100,60,0,50), PCMYKColor(0,0,0,0),PCMYKColor(0,0,0,0),PCMYKColor(0,0,0,0)]        # 直线样式列表        self._dashArray = [(1, 1), (6, 2), (2, 2, 2, 2, 10), ]        # 数据线所代表的名字列表        self._sNames = 'Liberty International', 'Persimmon', 'Royal Bank of Scotland',        # 依次赋值给每条数据线对应的属性:名字、颜色和直线样式        for i in range(len(self.chart.data)):            self.chart.lines[i].name = self._sNames[i]  # 数据线代表啥            self.chart.lines[i].strokeColor = self._colorsList[i]            # 数据线颜色            self.chart.lines[i].strokeDashArray = self._dashArray[i]            # 数据线样式        self.chart.lines.strokeWidth         = 2    # 数据线宽度        # 重新调整画板大小、图表坐标、图表宽高和图例坐标        self.width       = 400        self.height      = 200        self.chart.x               = 50        self.chart.y               = 50        self.chart.width           = 300        self.chart.height          = 100        self.legend.y              = 175        self.legend.x              = 100        # 图表上左、右、底部各加一条直线        self._add(self, Line(self.chart.x, self.chart.y, self.chart.x, self.chart.y + self.chart.height,                             strokeWidth=strokeWidth, strokeDashArray=dashArray, strokeLineCap=lineCap), name='L0')        self._add(self, Line(self.chart.x + self.chart.width, self.chart.y, self.chart.x + self.chart.width,                             self.chart.y + self.chart.height, strokeWidth=strokeWidth, strokeDashArray=dashArray,                             strokeLineCap=lineCap), name='L1', validate=None, desc=None)        self._add(self, Line(self.chart.x - overShoot, self.chart.y, self.chart.x + self.chart.width + overShoot,                             self.chart.y, strokeWidth=strokeWidth), name='L2', validate=None, desc=None)        # 底部直线左右多出一块,调整一下        self.L2.x1               = 50        self.L2.x2               = 350        self.L2.y1               = 50        self.L2.y2               = 50        # 调整线条宽度        self.L0.strokeWidth      = 1        self.L1.strokeWidth      = 1        self.L2.strokeWidth      = 0.75if __name__=="__main__": #NORUNTESTS    LineChart_DashedLinesNumberFormates().save(formats=['pdf'],outDir='.',fnRoot=None)

折线图 放大_第二个折线图(Line Plot)的示例代码相关推荐

  1. java时序图工具_快速学习时序图:时序图简介、画法及实例

    点击上方☝Java编程技术乐园,轻松关注!及时获取有趣有料的技术文章 做一个积极的人 编码.改bug.提升自己 我有一个乐园,面向编程,春暖花开! 一. 什么是时序图? 时序图(Sequence Di ...

  2. paddle 图标注_标注外包业务预算评估模板(示例)

    RT, 此处采用纯文本描述,PPT/表格 更佳 评估基准: 以10月项目供应商报价作为基准 标注目标(周边车场采集的): 伪3D(1框+3点) 行人(1框) freespace(1多边) 轮档(1多边 ...

  3. office2019 图目录_施工进度横道图不会做?18份计划模板收藏好,输入参数迅速成图...

    施工进度横道图不会做?18份计划模板收藏好,输入参数迅速成图 作为施工组织设计的关键内容,施工进度计划控制了工程施工进度.工程施工期限等各项施工活动.进度计划是否合理,直接影响施工速度.成本和质量.因 ...

  4. 支持向量机python代码_用TensorFlow实现多类支持向量机的示例代码

    这篇文章主要介绍了用TensorFlow实现多类支持向量机的示例代码,现在分享给大家,也给大家做个参考.一起过来看看吧 本文将详细展示一个多类支持向量机分类器训练iris数据集来分类三种花. SVM算 ...

  5. python怎么换背景颜色_用opencv给图片换背景色的示例代码

    图像平滑 模糊/平滑图片来消除图片噪声 OpenCV函数:cv2.blur(), cv2.GaussianBlur(), cv2.medianBlur(), cv2.bilateralFilter() ...

  6. java人体识别_【人体分析-人像分割】JavaAPI示例代码

    接口能力: 对于输入的一张图片(可正常解码,且长宽比适宜),识别人体的轮廓范围,与背景进行分离,适用于拍照背景替换.照片合成.身体特效等场景.输入正常人像图片,返回分割后的二值结果图和分割类型(目前仅 ...

  7. Intel IPP密码库 IPPCP 2018——第二部分 对称密码算法开发说明与示例代码

    2. Symmetric Cryptography 2.1加解密步骤 其中<Alg>指具体的密码算法,<Mode>指ECB.CBC.OFB.CFB.CTR模式. 执行步骤: 步 ...

  8. 缠论123买卖点主图公式_缠论主图指标的正确应用方式

    [本文最先发表于公众号「缠论技术」上,公众号缠论技术内容包涵完整版缠论视频学习教程.缠论中枢指标.缠论复盘视频以及文档和实战群等等,是缠论学习者的福音].曾经写过一篇文章关于讲到缠论中枢指标的导入和安 ...

  9. java代码杨辉三角_用java实现杨辉三角的示例代码

    之前有学弟问过我一道java的面试题,题目不算难.用java实现杨辉三角.我花了点时间整理了一下,发现挺有意思的,于是想写下来分享一下.在写代码之前,我们先理清下面两个问题. 什么是杨辉三角 杨辉三角 ...

最新文章

  1. 控制~Control System 线性系统
  2. SQL PASS将于8月24日在北京中医药大学举办线下活动
  3. python实时监控_使用Python监控Linux系统
  4. vba 当前文件名_值得学习和珍藏的VBA常用编程代码语句
  5. nginx学习文档之一 安装nginx-Linux下安装nginx
  6. Ubuntu18.04开机卡在“starting Gnome Display Manager”的解决方法
  7. Ubuntu - Firefox 视频无法播放问题解决方法
  8. 代码大全 服装尺寸图html,国际标准服装尺码对照表大全-实用衣服尺寸对照表...
  9. 如何把视频和音频合并?手把手教你合并
  10. 12个免费在线Logo生成器
  11. 计算机病毒和木马完全相同,木马和计算机病毒的特点
  12. 数独求解算法(回溯法和唯一解法)java实现
  13. oracle 函数插入操作,Oracle函数内部运用insert插入
  14. 随手记-记录一些技术点
  15. Live Messenger ,Gmail ,Orkut ,Wallop
  16. 登录功能——web网站登录
  17. c语言实验--正弦,C语言实验——正弦
  18. OpenLayers API整理
  19. 雷达原理-固态发射机
  20. Microsoft c++ Speech 识别接口快速入门

热门文章

  1. Linux开机启动过程(8):初期中断(缺页中断)和异常处理
  2. 实现较低的计时器粒度以重传TCP(RTO):时间轮算法如何减少开销
  3. MySQL 安装+管理
  4. git新建账号_github 账号创建
  5. python加法赋值运算符为_Python 运算符
  6. springboot实现条形码_Springboot转发重定向实现方式解析
  7. VUE3.x的基本使用
  8. 服务器块格式不正确的是什么,c#-服务器标签格式不正确.(databinder.eval)
  9. http服务器异步响应,4.异步非阻塞多进程的 Http 服务器
  10. Spring(一)概述