'Add a second legend to display markers - matplotlib
I am attempting to add a 2nd legend to display the max values (via markers).
However, only the marker type in mrkr is given in the 2nd legend and not the desired symbol corresponding to 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)
Desired Output:
2nd legend showing the markers with its symbol.
Solution 1:[1]
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')
Sources
This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.
Source: Stack Overflow
| Solution | Source |
|---|---|
| Solution 1 |

