Matplotlib: как показать элементы легенды по горизонтали? - PullRequest
0 голосов
/ 25 февраля 2019

Я бы хотел указать, будет ли легенда отображаться вертикально или горизонтально.Я не имею в виду текст легенды, как описано в посте Matplotlib легенды вертикального вращения .Мой фактический случай включает в себя произвольное количество серий, указанных с помощью виджета.Но следующий пример представляет суть проблемы:

Фрагмент:

# Imports
import pandas as pd
import matplotlib.pyplot as plt
import numpy as np

# data
np.random.seed(123)
x = pd.Series(np.random.randn(100),index=pd.date_range('1/1/2000', periods=100)).cumsum()
y = pd.Series(np.random.randn(100),index=pd.date_range('1/1/2000', periods=100)).cumsum()
z = pd.Series(np.random.randn(100),index=pd.date_range('1/1/2000', periods=100)).cumsum()
df = pd.concat([x,y,z], axis = 1)

# plot 
ax = plt.subplot()
for col in (df.columns):
    plt.plot(df[col])
plt.legend(loc="lower left")
plt.xticks(rotation=90)

Сюжет:

enter image description here

Макет по умолчанию выглядит как вертикальный.Глядя на детали help(ax.legend) и docs , кажется, нет простого способа изменить это на горизонтальный.Или есть?


Правка - Желаемая легенда: (с использованием MS Paint)

enter image description here

Ответы [ 2 ]

0 голосов
/ 25 февраля 2019

Я полагаю, что по горизонтали вы имеете в виду, что вы хотите, чтобы легенда перечисляла точки рядом друг с другом, а не по вертикали.

plt.legend(loc="lower left", mode = "expand", ncol = 3) #expand stretches it along the bottom 
# while ncol specifies the number of columns

https://matplotlib.org/api/pyplot_api.html#matplotlib.pyplot.legend

0 голосов
/ 25 февраля 2019

Укажите параметр ncol в легенде.В вашем случае что-то вроде:

plt.legend(loc="lower left", ncol=len(df.columns))

Это единственная строка, которую я изменил в вашем скрипте.

Рабочий полный код:

import pandas as pd
import matplotlib.pyplot as plt
import numpy as np

# data
np.random.seed(123)
x = pd.Series(np.random.randn(100),index=pd.date_range('1/1/2000', periods=100)).cumsum()
y = pd.Series(np.random.randn(100),index=pd.date_range('1/1/2000', periods=100)).cumsum()
z = pd.Series(np.random.randn(100),index=pd.date_range('1/1/2000', periods=100)).cumsum()
df = pd.concat([x,y,z], axis = 1)

# plot
ax = plt.subplot()
for col in (df.columns):
    plt.plot(df[col])
plt.legend(loc="lower left", ncol=len(df.columns))
plt.xticks(rotation=90)
plt.show()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...