使用Matplotlib繪制不同顏色的帶箭頭的線實(shí)例
周五的時(shí)候計(jì)算出來(lái)一條線路,但是計(jì)算出來(lái)的只是類似與
0->10->19->2->..0
這樣的線路只有寫代碼的人才能看的懂無(wú)法直觀的表達(dá)出來(lái),讓其它同事看的不清晰,所以考慮怎樣直觀的把線路圖畫出來(lái)。
&esp; 當(dāng)然是考慮用matplotlib了,
導(dǎo)入相關(guān)的庫(kù)
import matplotlib.pyplot as plt import numpy import matplotlib.colors as colors import matplotlib.cm as cmx
后面兩個(gè)主要是用于處理顏色的。
準(zhǔn)備數(shù)據(jù)
_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可以理解為顏色庫(kù),cNorm設(shè)置顏色的范圍,有幾條線路就設(shè)置幾種顏色,scalarMap顏色生成完畢。最后在繪圖的時(shí)候,根據(jù)索引獲得相應(yīng)的顏色就可以了。
結(jié)果如下:

補(bǔ)充知識(shí):Python包matplotlib繪圖--如何標(biāo)注某點(diǎn)--附代碼

# -*- 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 #解決符號(hào)無(wú)法顯示
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='時(shí)間/秒')
ax.set(xlabel='目標(biāo)函數(shù)個(gè)數(shù)', ylabel='程序運(yùn)行時(shí)間',title='多目標(biāo)收斂速度')
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')

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繪制不同顏色的帶箭頭的線實(shí)例就是小編分享給大家的全部?jī)?nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
Python基于Matplotlib庫(kù)簡(jiǎn)單繪制折線圖的方法示例
這篇文章主要介紹了Python基于Matplotlib庫(kù)簡(jiǎn)單繪制折線圖的方法,涉及Python Matplotlib庫(kù)的相關(guān)使用技巧,需要的朋友可以參考下2017-08-08
python實(shí)現(xiàn)批量處理將圖片粘貼到另一張圖片上并保存
今天小編就為大家分享一篇python實(shí)現(xiàn)批量處理將圖片粘貼到另一張圖片上并保存,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2019-12-12
Python中的五個(gè)神仙級(jí)函數(shù)一起來(lái)看看
這篇文章主要為大家介紹了Python中的五個(gè)神仙級(jí)函數(shù),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來(lái)幫助2022-01-01
Python語(yǔ)言實(shí)現(xiàn)機(jī)器學(xué)習(xí)的K-近鄰算法
今天學(xué)習(xí)的算法是KNN近鄰算法。KNN算法是一個(gè)監(jiān)督學(xué)習(xí)分類器類別的算法。下面我們來(lái)詳細(xì)的探討下2015-06-06
通過(guò)python實(shí)現(xiàn)隨機(jī)交換禮物程序詳解
這篇文章主要介紹了通過(guò)python實(shí)現(xiàn)隨機(jī)交換禮物程序詳解的,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-07-07
pyqt4教程之實(shí)現(xiàn)windows窗口小示例分享
這篇文章主要介紹了pyqt4實(shí)現(xiàn)windows窗口小示例,需要的朋友可以參考下2014-03-03
Python實(shí)現(xiàn)定時(shí)自動(dòng)關(guān)閉的tkinter窗口方法
今天小編就為大家分享一篇Python實(shí)現(xiàn)定時(shí)自動(dòng)關(guān)閉的tkinter窗口方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2019-02-02
PYQT5 vscode聯(lián)合操作qtdesigner的方法
這篇文章主要介紹了PYQT5 vscode聯(lián)合操作qtdesigner的方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-03-03
使用python腳本實(shí)現(xiàn)Redis未授權(quán)訪問(wèn)檢測(cè)
Redis未授權(quán)訪問(wèn)漏洞是一種安全漏洞,可能導(dǎo)致未經(jīng)授權(quán)的用戶或攻擊者訪問(wèn)Redis數(shù)據(jù)庫(kù),甚至修改或刪除其中的數(shù)據(jù),這種漏洞通常發(fā)生在管理員未正確配置Redis實(shí)例的訪問(wèn)控制和認(rèn)證機(jī)制時(shí),本文介紹了python腳本實(shí)現(xiàn)Redis未授權(quán)訪問(wèn)漏洞利用,需要的朋友可以參考下2024-10-10

