使用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操作Word批量生成文章的方法
Jul 28 Python
Python读取图片为16进制表示简单代码
Jan 19 Python
Python面向对象总结及类与正则表达式详解
Apr 18 Python
Python 异常的捕获、异常的传递与主动抛出异常操作示例
Sep 23 Python
Python数据处理篇之Sympy系列(五)---解方程
Oct 12 Python
Python pandas自定义函数的使用方法示例
Nov 20 Python
python pycharm最新版本激活码(永久有效)附python安装教程
Sep 18 Python
python如何实时获取tcpdump输出
Sep 16 Python
Python使用pyenv实现多环境管理
Feb 05 Python
python 获取域名到期时间的方法步骤
Feb 10 Python
PyTorch 如何自动计算梯度
May 23 Python
 Python 中 logging 模块使用详情
Mar 03 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
叶罗丽:为什么大家对颜冰这对CP非常关心,却对金茉两人十分冷漠
2020/03/17 国漫
组合算法的PHP解答方法
2012/02/04 PHP
PHP setTime 设置当前时间的代码
2012/08/27 PHP
php三维数组去重(示例代码)
2013/11/26 PHP
一个不易被发现的PHP后门代码解析
2014/07/05 PHP
PHP中对数组的一些常用的增、删、插操作函数总结
2015/11/27 PHP
Yii2.0建立公共方法简单示例
2019/01/29 PHP
fckeditor 获取文本框值的实现代码
2009/02/09 Javascript
javascript获得服务器端控件的ID的实现代码
2011/12/28 Javascript
jQuery中parentsUntil()方法用法实例
2015/01/07 Javascript
原生js实现日期联动
2015/01/12 Javascript
JS中Location使用详解
2015/05/12 Javascript
浅谈JavaScript异常处理语句
2015/06/26 Javascript
JS简单循环遍历json数组的方法
2016/04/22 Javascript
Ajax的概述与实现过程
2016/11/18 Javascript
javascript解析ajax返回的xml和json格式数据实例详解
2017/01/05 Javascript
详解webpack介绍&amp;安装&amp;常用命令
2017/06/29 Javascript
vue自定义指令之面板拖拽的实现
2019/04/14 Javascript
读懂CommonJS的模块加载
2019/04/19 Javascript
图解NodeJS实现登录注册功能
2019/09/16 NodeJs
一看就会的vuex实现登录验证(附案例)
2020/01/09 Javascript
JavaScript观察者模式原理与用法实例详解
2020/03/10 Javascript
在python中的socket模块使用代理实例
2014/05/29 Python
在Python中操作列表之List.append()方法的使用
2015/05/20 Python
Python网络编程中urllib2模块的用法总结
2016/07/12 Python
Python之Scrapy爬虫框架安装及使用详解
2017/11/16 Python
python协程gevent案例 爬取斗鱼图片过程解析
2019/08/27 Python
Python面向对象程序设计之继承、多态原理与用法详解
2020/03/23 Python
Python制作数据预测集成工具(值得收藏)
2020/08/21 Python
Python结合百度语音识别实现实时翻译软件的实现
2021/01/18 Python
ASICS印度官方网站:日本专业运动品牌
2020/06/20 全球购物
俄罗斯商务邀请函
2014/01/26 职场文书
运动会宣传口号
2014/06/09 职场文书
毕业生求职信
2014/06/10 职场文书
浅谈Python项目的服务器部署
2021/04/25 Python
《吸血鬼:避世 血猎》官宣4.27发售 系列首款大逃杀
2022/04/03 其他游戏