使用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 相关文章推荐
Windows下Eclipse+PyDev配置Python+PyQt4开发环境
May 17 Python
Python的Django框架中forms表单类的使用方法详解
Jun 21 Python
python解决网站的反爬虫策略总结
Oct 26 Python
详解python的webrtc库实现语音端点检测
May 31 Python
python re模块findall()函数实例解析
Jan 19 Python
python使用opencv按一定间隔截取视频帧
Mar 06 Python
使用Pyhton集合set()实现成果查漏的例子
Nov 24 Python
PyTorch里面的torch.nn.Parameter()详解
Jan 03 Python
对Matlab中共轭、转置和共轭装置的区别说明
May 11 Python
pycharm sciview的图片另存为操作
Jun 01 Python
Python Selenium破解滑块验证码最新版(GEETEST95%以上通过率)
Jan 29 Python
浅谈Python从全局与局部变量到装饰器的相关知识
Jun 21 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
PHP静态类
2006/11/25 PHP
PHP网络操作函数汇总
2015/05/18 PHP
详解PHP的Yii框架中扩展的安装与使用
2016/04/01 PHP
使用PHPMailer发送邮件实例
2017/02/15 PHP
php链式操作的实现方式分析
2019/08/12 PHP
JavaScript 选中文字并响应获取的实现代码
2011/08/28 Javascript
table对象中的insertRow与deleteRow使用示例
2014/01/26 Javascript
Node.js中的事件驱动编程详解
2014/08/16 Javascript
jQuery插件Skippr实现焦点图幻灯片特效
2015/04/12 Javascript
教你使用javascript简单写一个页面模板引擎
2015/05/05 Javascript
下雪了 javascript实现雪花飞舞
2020/08/02 Javascript
jQuery解决$符号命名冲突
2016/06/18 Javascript
js复制内容到剪贴板代码,js复制代码的简单实例
2016/10/27 Javascript
Vue.js学习之计算属性
2017/01/22 Javascript
EasyUI为Numberbox添加blur事件的方法
2017/03/05 Javascript
JS实现求数组起始项到终止项之和的方法【基于数组扩展函数】
2017/06/13 Javascript
JavaScript中附件预览功能实现详解(推荐)
2017/08/15 Javascript
Angular弹出模态框的两种方式
2017/10/19 Javascript
localstorage实现带过期时间的缓存功能
2019/06/28 Javascript
jQuery 筛选器简单操作示例
2019/10/02 jQuery
使用Vue-cli3.0创建的项目 如何发布npm包
2019/10/10 Javascript
浅谈Vue3.0新版API之composition-api入坑指南
2020/04/30 Javascript
Python中itertools模块用法详解
2014/09/25 Python
Python os模块介绍
2014/11/30 Python
实例解析Python中的__new__特殊方法
2016/06/02 Python
python+mongodb数据抓取详细介绍
2017/10/25 Python
详解利用django中间件django.middleware.csrf.CsrfViewMiddleware防止csrf攻击
2018/10/09 Python
python创建文件时去掉非法字符的方法
2018/10/31 Python
Python中一个for循环循环多个变量的示例
2019/07/16 Python
django 文件上传功能的相关实例代码(简单易懂)
2020/01/22 Python
Evisu官方网站:日本牛仔品牌,时尚街头设计风格
2016/12/30 全球购物
四年的大学生生活自我评价
2013/12/09 职场文书
作文评语集锦大全
2014/04/23 职场文书
旅游项目合作意向书
2015/05/08 职场文书
2016年公司新年寄语
2015/08/17 职场文书
2019数学教师下学期工作总结
2019/06/27 职场文书