使用Matplotlib绘制不同颜色的带箭头的线实例


Posted in Python onApril 17, 2020

周五的时候计算出来一条线路,但是计算出来的只是类似与

0->10->19->2->..0

这样的线路只有写代码的人才能看的懂无法直观的表达出来,让其它同事看的不清晰,所以考虑怎样直观的把线路图画出来。

&esp; 当然是考虑用matplotlib了,

导入相关的库

import matplotlib.pyplot as plt
import numpy
import matplotlib.colors as colors
import matplotlib.cm as cmx

后面两个主要是用于处理颜色的。

准备数据

_locations = [
    (4, 4), # depot
    (4, 4), # unload depot_prime
    (4, 4), # unload depot_second
    (4, 4), # unload depot_fourth
    (4, 4), # unload depot_fourth
    (4, 4), # unload depot_fifth
    (2, 0),
    (8, 0), # locations to visit
    (0, 1),
    (1, 1),
    (5, 2),
    (7, 2),
    (3, 3),
    (6, 3),
    (5, 5),
    (8, 5),
    (1, 6),
    (2, 6),
    (3, 7),
    (6, 7),
    (0, 8),
    (7, 8)
  ]

画图

plt.figure(figsize=(10, 10))
p1 = [l[0] for l in _locations]
p2 = [l[1] for l in _locations]
plt.plot(p1[:6], p2[:6], 'g*', ms=20, label='depot')
plt.plot(p1[6:], p2[6:], 'ro', ms=15, label='customer')
plt.grid(True)
plt.legend(loc='lower left')

way = [[0, 12, 18, 17, 16, 4, 14, 10, 11, 13, 5], [0, 6, 9, 8, 20, 3], [0, 19, 21, 15, 7, 2]]  # 

cmap = plt.cm.jet
cNorm = colors.Normalize(vmin=0, vmax=len(way))
scalarMap = cmx.ScalarMappable(norm=cNorm,cmap=cmap)

for k in range(0, len(way)):
  way0 = way[k]
  colorVal = scalarMap.to_rgba(k)
  for i in range(0, len(way0)-1):
    start = _locations[way0[i]]
    end = _locations[way0[i+1]]
#     plt.arrow(start[0], start[1], end[0]-start[0], end[1]-start[1], length_includes_head=True,
#         head_width=0.2, head_length=0.3, fc='k', ec='k', lw=2, ls=lineStyle[k], color='red')
    plt.arrow(start[0], start[1], end[0]-start[0], end[1]-start[1], 
         length_includes_head=True, head_width=0.2, lw=2,
         color=colorVal)
plt.show()
cmap = plt.cm.jet
cNorm = colors.Normalize(vmin=0, vmax=len(way))
scalarMap = cmx.ScalarMappable(norm=cNorm,cmap=cmap)

cmap可以理解为颜色库,cNorm设置颜色的范围,有几条线路就设置几种颜色,scalarMap颜色生成完毕。最后在绘图的时候,根据索引获得相应的颜色就可以了。

结果如下:

使用Matplotlib绘制不同颜色的带箭头的线实例

补充知识:Python包matplotlib绘图--如何标注某点--附代码

使用Matplotlib绘制不同颜色的带箭头的线实例

# -*- coding: utf-8 -*-
import matplotlib as mpl
import matplotlib.pyplot as plt
import numpy as np
plt.style.use('classic')

plt.rcParams['font.sans-serif'] = ['SimHei'] #解决中文显示
plt.rcParams['axes.unicode_minus'] = False #解决符号无法显示

x=np.array([1,2,3,4,5,6,7,8])
y1=np.array([3,5,35,300,800,600,1200,4000])
y2=np.array([8,14,94,703,1300,1660,2801,12768])

fig1 = plt.figure()

ax = plt.axes()
ax.plot(x, y2,label='时间/秒')
ax.set(xlabel='目标函数个数', ylabel='程序运行时间',title='多目标收敛速度')

plt.hlines(703, 0, 4, colors='r', linestyle="--")
plt.text(0, 703, "703")
plt.hlines(1300, 0, 5, colors='g', linestyle="--")
plt.text(0, 1300, "1300")

# annotate 
plt.annotate("703秒", (4,703), xycoords='data',
       xytext=(4.2, 2000), 
       arrowprops=dict(arrowstyle='->')) 
plt.annotate("94秒", (3,94), xycoords='data',
       xytext=(3.5, 2000), 
       arrowprops=dict(arrowstyle='->')) 
plt.annotate("14秒", (2,14), xycoords='data',
       xytext=(2.5, 2000), 
       arrowprops=dict(arrowstyle='->')) 
plt.annotate("8秒", (1,8), xycoords='data',
       xytext=(1.5, 2000), 
       arrowprops=dict(arrowstyle='->')) 
plt.legend()
plt.show()
fig1.savefig('my_figure1.png')

使用Matplotlib绘制不同颜色的带箭头的线实例

import numpy as np
from matplotlib import pyplot as plt
from matplotlib.path import Path
from matplotlib.patches import PathPatch

# Use seaborn to change the default graphics to something nicer
import seaborn as sns
# And set a nice color palette
sns.set_color_codes('deep')

# Create the plot object
fig, ax = plt.subplots(figsize=(5, 4))
x = np.linspace(0, 1000)

# Add finishing constraint: x2 <= 100/2 - x1/2
plt.plot(x, 50/4 - 3*x/4, linewidth=3, label='First constraint')
plt.fill_between(x, 0, 100/2 - x/2, alpha=0.1)

# Add carpentry constraint: x2 <= 80 - x1
plt.plot(x, 30 - 2*x, linewidth=3, label='Second constraint')
plt.fill_between(x, 0, 100 - 2*x, alpha=0.1)

# Add non-negativity constraints
plt.plot(np.zeros_like(x), x, linewidth=3, label='$x$ Sign restriction')
plt.plot(x, np.zeros_like(x), linewidth=3, label='$y$ Sign restriction')

#====================================================
# This part is different from giapetto_feasible.py
# Plot the possible (x1, x2) pairs
pairs = [(x, y) for x in np.arange(101)
        for y in np.arange(101)
        if (300*x + 400*y) <= 5000
        and (200*x + 100*y) <= 3000]

# Split these into our variables
chairs, tables = np.hsplit(np.array(pairs), 2)

# Caculate the objective function at each pair
z =8*chairs + 9*tables

# Plot the results
plt.scatter(chairs, tables, c=z, cmap='jet', edgecolor='gray', alpha=0.5, label='Profit at each point', zorder=3)

# Colorbar
cb = plt.colorbar()
cb.set_label('Profit Colormap ($)')
#====================================================

# Labels and stuff
plt.xlabel('Package A')
plt.ylabel('Package B')
plt.xlim(-0.5, 20)
plt.ylim(-0.5, 20)
plt.legend()
fig01 = plt.figure()
plt.show()

以上这篇使用Matplotlib绘制不同颜色的带箭头的线实例就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python实现扫描指定目录下的子目录及文件的方法
Jul 16 Python
老生常谈python函数参数的区别(必看篇)
May 29 Python
python将unicode转为str的方法
Jun 21 Python
解决出现Incorrect integer value: '' for column 'id' at row 1的问题
Oct 29 Python
python读取Kafka实例
Dec 23 Python
python ftplib模块使用代码实例
Dec 31 Python
Python定时从Mysql提取数据存入Redis的实现
May 03 Python
pytorch VGG11识别cifar10数据集(训练+预测单张输入图片操作)
Jun 24 Python
Python安装第三方库攻略(pip和Anaconda)
Oct 15 Python
基于Django快速集成Echarts代码示例
Dec 01 Python
详细总结Python常见的安全问题
May 21 Python
Python爬虫入门案例之回车桌面壁纸网美女图片采集
Oct 16 Python
matplotlib 曲线图 和 折线图 plt.plot()实例
Apr 17 #Python
Python实现自动打开电脑应用的示例代码
Apr 17 #Python
Python matplotlib绘制图形实例(包括点,曲线,注释和箭头)
Apr 17 #Python
Python读取excel文件中带公式的值的实现
Apr 17 #Python
在Matplotlib图中插入LaTex公式实例
Apr 17 #Python
python中for in的用法详解
Apr 17 #Python
解决Jupyter无法导入已安装的 module问题
Apr 17 #Python
You might like
第十四节--命名空间
2006/11/16 PHP
百度ping方法使用示例 自动ping百度
2014/01/26 PHP
适用于初学者的简易PHP文件上传类
2015/10/29 PHP
PHP基于rabbitmq操作类的生产者和消费者功能示例
2018/06/16 PHP
PHP如何通过表单直接提交大文件详解
2019/01/08 PHP
使用PHPWord生成word文档的方法详解
2019/06/06 PHP
Laravel框架中队列和工作(Queues、Jobs)操作实例详解
2020/04/06 PHP
一个关于javascript匿名函数的问题分析
2012/03/30 Javascript
javascript将数字转换整数金额大写的方法
2015/01/27 Javascript
javascript html5实现表单验证
2016/03/01 Javascript
ionic 上拉菜单(ActionSheet)实例代码
2016/06/06 Javascript
jQuery实现表格隔行及滑动,点击时变色的方法【测试可用】
2016/08/20 Javascript
Vuejs第八篇之Vuejs组件的定义实例解析
2016/09/05 Javascript
Bootstrap基本样式学习笔记之标签(5)
2016/12/07 Javascript
canvas 画布在主流浏览器中的尺寸限制详细介绍
2016/12/15 Javascript
在vue中多次调用同一个定义全局变量的实例
2018/09/25 Javascript
python基础教程之面向对象的一些概念
2014/08/29 Python
python实现根据用户输入从电影网站获取影片信息的方法
2015/04/07 Python
python装饰器与递归算法详解
2016/02/18 Python
Python selenium 三种等待方式解读
2016/09/15 Python
Python实现基于TCP UDP协议的IPv4 IPv6模式客户端和服务端功能示例
2018/03/22 Python
Python 字符串换行的多种方式
2018/09/06 Python
pycharm恢复默认设置或者是替换pycharm的解释器实例
2018/10/29 Python
python机器学习包mlxtend的安装和配置详解
2019/08/21 Python
flask框架渲染Jinja模板与传入模板变量操作详解
2020/01/25 Python
Python坐标轴操作及设置代码实例
2020/06/04 Python
Python 如何查找特定类型文件
2020/08/17 Python
python爬取youtube视频的示例代码
2021/03/03 Python
日本乐天官方海外转运服务:Rakuten Global Express
2018/11/30 全球购物
信用社主任竞聘演讲稿
2014/05/23 职场文书
2014党委书记四风对照检查材料思想汇报
2014/09/21 职场文书
旷课检讨书范文
2014/10/30 职场文书
不尊敬老师检讨书范文
2014/11/19 职场文书
2016关于学习党章的心得体会
2016/01/15 职场文书
人事部:年度述职报告范文
2019/07/12 职场文书
Django+Nginx+uWSGI 定时任务的实现方法
2022/01/22 Python