簡體   English   中英

matplotlib 中帶有箭頭的線圖,用於繪制 4 個元素列表的所有 4 條線

[英]Line plot with arrows in matplotlib for all 4 lines plotted with lists of 4 elements

這些變量都是包含 4 個元素的列表。 我試圖讓箭頭顯示在折線圖中以下所有列表的這 4 個元素之間。 換句話說,我將為下圖中的 4 條線中的每條線設置 3 個箭頭。

我遇到了這篇建議使用quiver的帖子,但我不確定如何將它應用到我的用例Line plot with arrows in matplotlib任何建議都值得贊賞。

median1
median2
median3
median4

median_a
median_b
median_c
median_d

import matplotlib.pyplot as plt

x1 = median_a
x2 = median_b
x3 = median_c
x4 = median_d


y1 = median1
y2 = median2
y3 = median3
y4 = median4


line1 = plt.plot(x1, y1,'bo-',label='B0') 
line2 = plt.plot(x2, y2,'go-',label='B1') 
line3 = plt.plot(x3, y3,'ko-',label='B2')
line4 = plt.plot(x4, y4,'ro-',label='B3') 


plt.title("Flow")
plt.ylabel("Speed")
plt.xlabel("Size")


plt.legend(bbox_to_anchor=(1.5, 1),
           bbox_transform=plt.gcf().transFigure)

在此處輸入圖像描述

import numpy as np
import matplotlib.pyplot as plt


median_a, median_b, median_c, median_d = [np.random.random((4, 1)) for _ in range(4)]
median1, median2, median3, median4 = [np.random.random((4, 1)) for _ in range(4)]

x1 = median_a
x2 = median_b
x3 = median_c
x4 = median_d


y1 = median1
y2 = median2
y3 = median3
y4 = median4

deltaX1, deltaX2, deltaX3, deltaX4 = [x[1:]-x[:-1] for x in [x1, x2, x3, x4]]
deltaY1, deltaY2, deltaY3, deltaY4 = [y[1:]-y[:-1] for y in [y1, y2, y3, y4]]



line1 = plt.plot(x1, y1,'bo-',label='B0') 
line2 = plt.plot(x2, y2,'go-',label='B1') 
line3 = plt.plot(x3, y3,'ko-',label='B2')
line4 = plt.plot(x4, y4,'ro-',label='B3') 

arrows1 = plt.quiver(x1[:-1], y1[:-1], deltaX1, deltaY1, scale_units='xy', angles='xy', scale=1)
arrows2 = plt.quiver(x2[:-1], y2[:-1], deltaX2, deltaY2, scale_units='xy', angles='xy', scale=1)
arrows3 = plt.quiver(x3[:-1], y3[:-1], deltaX3, deltaY3, scale_units='xy', angles='xy', scale=1)
arrows4 = plt.quiver(x4[:-1], y4[:-1], deltaX4, deltaY4, scale_units='xy', angles='xy', scale=1)

plt.title("Flow")
plt.ylabel("Speed")
plt.xlabel("Size")


plt.legend()

plt.show()

在此處輸入圖像描述

為了防止在其他答案中重復繪制,您可以直接指定箭頭顏色。 此外,由於您要繪制四次,因此循環執行會更容易。

xx = [median_a, median_b, median_c, median_d]
yy = [median1, median2, median3, median4]
colors = ['b', 'g', 'k', 'r']

for idx, (x, y) in enumerate(zip(xx, yy)):
    Q = plt.quiver(x[:-1], y[:-1], x[1:]-x[:-1], y[1:]-y[:-1], color=colors[idx], scale_units='xy', angles='xy', scale=1)
    plt.quiverkey(Q, 0.95, 1-idx/10, 0.05, label=f'B{idx}', labelpos='N')

plt.title("Flow")
plt.ylabel("Speed")
plt.xlabel("Size")

plt.show()

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM