我創建了一個標記串列,其中每個標記用于顯示該曲線的最大值。(4 條曲線 -> 4 個標記)
不知何故,我無法讓所有標記出現在情節中。似乎只繪制了 for 回圈中的第一個標記。
import pandas as pd
from matplotlib import pyplot as plt
import numpy as np
df0 = pd.DataFrame(np.random.randint(0,1000,size=(18, 4)), columns=list('ABCD'))
#df0 = pd.read_excel("est.xlsx")
df0.plot()
mylist = list(df0)
# df=df.astype(float)
mrkr = ['o', '.', 'v', 'x']
mrkr_df = pd.DataFrame(mrkr)
idx_mx_vals = []
for i in range(len(mylist)):
if df0[mylist[i]][0] > 0:
idx_mx_vals.append(df0[mylist[i]].idxmax())
else:
idx_mx_vals.append(df0[mylist[i]].idxmin())
mx_vals = []
for i in range(len(mylist)):
if df0[mylist[i]][0] > 0:
mx_vals.append(df0[mylist[i]].max())
else:
mx_vals.append(df0[mylist[i]].min())
d = {}
for i in range(len(mylist)):
d[df0.columns[i]] = [idx_mx_vals[i], mx_vals[i], mrkr[i]]
df = pd.DataFrame(d)
print(df)
for col in range(len(mrkr_df.columns)):
plt.plot(df.iloc[0, col], df.iloc[1, col], marker=mrkr_df.iloc[2, col],
markersize=20)
uj5u.com熱心網友回復:
您可以大大簡化您的代碼,idxmax直接將絕對值用作矢量呼叫。您也不需要創建中間資料幀來保存 idxmax/max(我仍然展示了一種更簡單的計算方法)。
這是繪制曲線和最大極值的簡單版本。我還添加了相同的顏色來匹配線條。
import pandas as pd
from matplotlib import pyplot as plt
import numpy as np
np.random.seed(0)
df0 = pd.DataFrame(np.random.randint(0,1000,size=(18, 4)), columns=list('ABCD'))
#df0 = pd.read_excel("est.xlsx")
ax = df0.plot()
mrkr = ['o', '.', 'v', 'x']
mrkr_df = pd.DataFrame(mrkr)
idx_mx_vals = df0.abs().idxmax().to_list()
mx_vals = df0.to_numpy()[idx_mx_vals, np.arange(len(idx_mx_vals))].tolist()
# not needed
#df = pd.DataFrame(dict(zip(df, zip(idx_mx_vals, mx_vals, mrkr))))
for x, y, m, line in zip(idx_mx_vals, mx_vals, mrkr, ax.lines):
ax.plot(x, y, marker=m, c=line.get_color(), markersize=20)
輸出:

uj5u.com熱心網友回復:
代替:
for col in range(len(mrkr_df.columns)):
plt.plot(df.iloc[0, col], df.iloc[1, col], marker=mrkr_df.iloc[2, col],
markersize=20)
和:
for col, m in enumerate(mrkr):
plt.plot(df.iloc[0, col], df.iloc[1, col], marker=m, markersize=20)
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/473883.html
標籤:Python matplotlib
