使用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 相关文章推荐
详解Django中的过滤器
Jul 16 Python
Python将图片转换为字符画的方法
Jun 16 Python
Python DataFrame 设置输出不显示index(索引)值的方法
Jun 07 Python
Python使用numpy产生正态分布随机数的向量或矩阵操作示例
Aug 22 Python
python 产生token及token验证的方法
Dec 26 Python
python aiohttp的使用详解
Jun 20 Python
python GUI库图形界面开发之PyQt5滚动条控件QScrollBar详细使用方法与实例
Mar 06 Python
python 将视频 通过视频帧转换成时间实例
Apr 23 Python
Python 实现将numpy中的nan和inf,nan替换成对应的均值
Jun 08 Python
浅析Python __name__ 是什么
Jul 07 Python
python 如何读、写、解析CSV文件
Mar 03 Python
Python 如何安装Selenium
May 06 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
BBS(php &amp; mysql)完整版(一)
2006/10/09 PHP
调整PHP的性能
2013/10/30 PHP
PHP简单判断手机设备的方法
2016/08/23 PHP
php判断文件上传图片格式的实例详解
2017/09/30 PHP
Referer原理与图片防盗链实现方法详解
2019/07/03 PHP
js对象的构造和继承实现代码
2010/12/05 Javascript
js 获取计算后的样式写法及注意事项
2013/02/25 Javascript
js调试系列 源码定位与调试[基础篇]
2014/06/18 Javascript
基于Echarts 3.19 制作常用的图形(非静态)
2016/05/19 Javascript
纯JavaScript手写图片轮播代码
2016/10/20 Javascript
js单页hash路由原理与应用实战详解
2017/08/14 Javascript
Vue数据双向绑定原理及简单实现方法
2018/05/18 Javascript
Vue 实现列表动态添加和删除的两种方法小结
2018/09/07 Javascript
vue 实现模糊检索并根据其他字符的首字母顺序排列
2019/09/19 Javascript
VUE 解决mode为history页面为空白的问题
2019/11/01 Javascript
webpack3.0升级4.0的方法步骤
2020/04/02 Javascript
基于JavaScript实现表格隔行换色
2020/05/08 Javascript
Vue结合路由配置递归实现菜单栏功能
2020/06/16 Javascript
Python中内置数据类型list,tuple,dict,set的区别和用法
2015/12/14 Python
Python用UUID库生成唯一ID的方法示例
2016/12/15 Python
numpy基础教程之np.linalg
2019/02/12 Python
python实现接口并发测试脚本
2019/06/25 Python
使用python telnetlib批量备份交换机配置的方法
2019/07/25 Python
nginx黑名单和django限速,最简单的防恶意请求方法分享
2019/08/09 Python
CSS3制作炫酷带方向感应的鼠标滑过图片3D动画
2016/03/16 HTML / CSS
Hanky Panky官方网站:内衣和睡衣
2019/07/25 全球购物
在阿尔卑斯山或希腊度过快乐假期:Alpine Elements
2019/12/28 全球购物
GWT的应用有哪两种部署模式
2012/12/21 面试题
保险公司晨会主持词
2014/03/22 职场文书
《忆江南》教学反思
2014/04/07 职场文书
春季防火方案
2014/05/10 职场文书
师德师风自查总结
2014/10/14 职场文书
歌咏比赛主持词
2015/06/29 职场文书
python关于集合的知识案例详解
2021/05/30 Python
苹果发布了MagSafe固件更新,可以不外接电源实现最高7.5W充电
2022/04/21 数码科技
td 内容自动换行 table表格td设置宽度后文字太多自动换行
2022/12/24 HTML / CSS