簡體   English   中英

線 plot 標記在終點

[英]Line plot with marker at final point

我正在尋找繪制在重力作用下的粒子點的圖表,目前正在生成如下 plot:

在此處輸入圖像描述

但是,我想制作一個更清晰的 plot 顯示粒子路徑的線和最后一點的標記,指示它們的最終位置,如下面的 plot 所示: 在此處輸入圖像描述

我當前繪制每一行的代碼行是:

plt.plot(N_pos[:,0] * AU, N_pos[:,1], 'o')

這只是從列出每個粒子的 x、y 和 z 坐標的數組中繪制 x 和 y 坐標

最簡單的方法是從代碼中刪除“o”標記,而只是 plot 是每個粒子的最后一個 position,但這次使用標記? 如果是這樣,我如何使線條和最終標記的顏色相同,而不是像下面這樣?:

在此處輸入圖像描述

for i in range(len(all_positions[0])):
    N_pos = all_positions[:,i]
    plt.plot(N_pos[:,0] , N_pos[:,1])
    plt.plot(N_pos[:,0][-1] , N_pos[:,1][-1], 'o')

當沒有給出明確的顏色時, plt.plot()在默認 colors 列表中循環。 一個簡單的解決方案是從線圖中提取顏色並將其作為點的顏色提供:

import numpy as np
import matplotlib.pyplot as plt

a = np.random.randn(200, 10, 1).cumsum(axis=0) * 0.1
all_positions = np.dstack([np.sin(a), np.cos(a)]).cumsum(axis=0)

for i in range(len(all_positions[0])):
    N_pos = all_positions[:, i]
    line, = plt.plot(N_pos[:, 0], N_pos[:, 1])
    plt.plot(N_pos[:, 0][-1], N_pos[:, 1][-1], 'o', color=line.get_color())
plt.show()

示例圖

另一種選擇是創建散點圖 plot,並通過數組設置點的大小。 例如, N-11和一次20

for i in range(len(all_positions[0])):
    N_pos = all_positions[:, i]
    plt.scatter(N_pos[:, 0], N_pos[:, 1], s=np.append(np.ones(len(N_pos) - 1), 20))

您可以定義自己的調色板並為每條軌跡賦予其獨特的(ish)顏色:

import numpy as np
import matplotlib.pyplot as plt
from matplotlib import cm

np.random.random(123)
all_positions = np.random.randn(10, 5, 2).cumsum(axis=0) #shamelessly stolen from JohanC
l = all_positions.shape[1]

my_cmap = cm.plasma

for i in range(l):
    N_pos = all_positions[:,i]
    plt.plot(N_pos[:,0], N_pos[:,1], c= my_cmap(i/l))
    plt.plot(N_pos[:,0][-1], N_pos[:,1][-1], 'o', color=my_cmap(i/l))

plt.show()

Output: 在此處輸入圖像描述

您可以在第二輪重置顏色循環儀和 plot 標記(不推薦,只是為了說明循環儀屬性):

import numpy as np
import matplotlib.pyplot as plt

np.random.random(123)
all_positions = np.random.randn(10, 5, 2).cumsum(axis=0)
l = all_positions.shape[1]

for i in range(l):
    N_pos = all_positions[:,i]
    plt.plot(N_pos[:,0], N_pos[:,1])

plt.gca().set_prop_cycle(None)
    
for i in range(l):
    N_pos = all_positions[:,i]
    plt.plot(N_pos[:,0][-1], N_pos[:,1][-1], 'o')

plt.show()

樣品 output: 在此處輸入圖像描述

暫無
暫無

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

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