1. 程式人生 > 程式設計 >使用Matplotlib繪製不同顏色的帶箭頭的線例項

使用Matplotlib繪製不同顏色的帶箭頭的線例項

週五的時候計算出來一條線路,但是計算出來的只是類似與

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,# unload depot_prime
    (4,# unload depot_second
    (4,# unload depot_fourth
    (4,# unload depot_fifth
    (2,0),(8,# locations to visit
    (0,1),(1,(5,2),(7,(3,3),(6,5),6),(2,7),(0,8),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],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],head_width=0.2,color=colorVal)
plt.show()
cmap = plt.cm.jet
cNorm = colors.Normalize(vmin=0,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,5,8])
y1=np.array([3,35,300,800,600,1200,4000])
y2=np.array([8,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,colors='r',linestyle="--")
plt.text(0,"703")
plt.hlines(1300,colors='g',"1300")

# annotate 
plt.annotate("703秒",(4,703),xycoords='data',xytext=(4.2,2000),arrowprops=dict(arrowstyle='->')) 
plt.annotate("94秒",94),xytext=(3.5,arrowprops=dict(arrowstyle='->')) 
plt.annotate("14秒",14),xytext=(2.5,arrowprops=dict(arrowstyle='->')) 
plt.annotate("8秒",xytext=(1.5,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,100/2 - x/2,alpha=0.1)

# Add carpentry constraint: x2 <= 80 - x1
plt.plot(x,30 - 2*x,label='Second constraint')
plt.fill_between(x,100 - 2*x,alpha=0.1)

# Add non-negativity constraints
plt.plot(np.zeros_like(x),x,label='$x$ Sign restriction')
plt.plot(x,np.zeros_like(x),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繪製不同顏色的帶箭頭的線例項就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支援我們。