添加第二个图例以显示标记 - matplotlib
Add a second legend to display markers - matplotlib
我正在尝试添加第二个图例以显示最大值(通过标记)。
然而,在第 2 个图例中只给出了 mrkr
中的标记类型,而不是对应于 mrkr
的所需符号。
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'))
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()
for x, y, m, line in zip(idx_mx_vals, mx_vals, mrkr, ax.lines):
line2 = ax.plot(x, y, marker=m, c=line.get_color(), markersize=20)
leg1 = ax.legend(loc='upper right')
leg2 = ax.legend(mrkr, loc='lower right')
# manually return leg1
ax.add_artist(leg1)
期望的输出:
2nd legend showing the markers with its symbol.
legend_elements = []
for x, y, m, line in zip(idx_mx_vals, mx_vals, mrkr, ax.lines):
line2 = ax.plot(x, y, marker=m, c=line.get_color(), markersize=20)
legend_elements.append(Line2D([0], [0], c=line.get_color(), marker=m, label=m))
leg1 = ax.legend(loc='upper right')
leg2 = ax.legend(handles=legend_elements, loc='lower right')
我正在尝试添加第二个图例以显示最大值(通过标记)。
然而,在第 2 个图例中只给出了 mrkr
中的标记类型,而不是对应于 mrkr
的所需符号。
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'))
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()
for x, y, m, line in zip(idx_mx_vals, mx_vals, mrkr, ax.lines):
line2 = ax.plot(x, y, marker=m, c=line.get_color(), markersize=20)
leg1 = ax.legend(loc='upper right')
leg2 = ax.legend(mrkr, loc='lower right')
# manually return leg1
ax.add_artist(leg1)
期望的输出:
2nd legend showing the markers with its symbol.
legend_elements = []
for x, y, m, line in zip(idx_mx_vals, mx_vals, mrkr, ax.lines):
line2 = ax.plot(x, y, marker=m, c=line.get_color(), markersize=20)
legend_elements.append(Line2D([0], [0], c=line.get_color(), marker=m, label=m))
leg1 = ax.legend(loc='upper right')
leg2 = ax.legend(handles=legend_elements, loc='lower right')