使用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 lambda和Python def区别分析
Nov 30 Python
python获取标准北京时间的方法
Mar 24 Python
用Python操作字符串之rindex()方法的使用
May 19 Python
Python实现统计英文单词个数及字符串分割代码
May 28 Python
Python编程中归并排序算法的实现步骤详解
May 04 Python
python算法演练_One Rule 算法(详解)
May 17 Python
python实现数据图表
Jul 29 Python
python sys.argv[]用法实例详解
May 25 Python
Django项目中包含多个应用时对url的配置方法
May 30 Python
利用python 下载bilibili视频
Nov 13 Python
python实现简单的聊天小程序
Jul 07 Python
Python函数中apply、map、applymap的区别
Nov 27 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
asp和php下textarea提交大量数据发生丢失的解决方法
2008/01/20 PHP
php中用数组的方法设置cookies
2011/04/21 PHP
PHP删除数组中的特定元素的代码
2012/06/28 PHP
PHP下通过QRCode类库创建中间带网站LOGO的二维码
2014/07/12 PHP
php使用GD库创建图片缩略图的方法
2015/06/10 PHP
JQuery AJAX 中文乱码问题解决
2013/06/05 Javascript
Jquery 切换不同图片示例代码
2013/12/05 Javascript
两种方法基于jQuery实现IE浏览器兼容placeholder效果
2014/10/14 Javascript
JavaScript版的TwoQueues缓存模型
2014/12/29 Javascript
TypeScript 学习笔记之基本类型
2015/06/19 Javascript
jQuery原生的动画效果
2015/07/10 Javascript
jq实现左侧显示图片右侧文字滑动切换效果
2015/08/04 Javascript
js判断上传文件后缀名是否合法
2016/01/28 Javascript
jquery.form.js框架实现文件上传功能案例解析(springmvc)
2016/05/26 Javascript
js倒计时简单实现代码
2016/08/11 Javascript
详解vue-router 2.0 常用基础知识点之导航钩子
2017/05/10 Javascript
Node.js API详解之 module模块用法实例分析
2020/05/13 Javascript
Node.js中出现未捕获异常的处理方法
2020/06/29 Javascript
vue数据更新UI不刷新显示的解决办法
2020/08/06 Javascript
跟老齐学Python之模块的加载
2014/10/24 Python
Python编程实现双链表,栈,队列及二叉树的方法示例
2017/11/01 Python
python3读取csv和xlsx文件的实例
2018/06/22 Python
python支付宝支付示例详解
2019/08/22 Python
python中有关时间日期格式转换问题
2019/12/25 Python
tensorflow 2.1.0 安装与实战教程(CASIA FACE v5)
2020/06/30 Python
python爬取网易云音乐热歌榜实例代码
2020/08/07 Python
使用Python webdriver图书馆抢座自动预约的正确方法
2021/03/04 Python
使用html2canvas.js实现页面截图并显示或上传的示例代码
2018/12/18 HTML / CSS
会计辞职信范文
2014/01/15 职场文书
《最佳路径》教学反思
2014/04/13 职场文书
银行柜员求职自荐书
2014/06/18 职场文书
向国旗敬礼活动小结
2014/09/27 职场文书
帝企鹅日记观后感
2015/06/10 职场文书
解决hive中导入text文件遇到的坑
2021/04/07 Python
python基于scrapy爬取京东笔记本电脑数据并进行简单处理和分析
2021/04/14 Python
MySQL池化框架学习接池自定义
2022/07/23 MySQL