Как создать автоматический набор вложенных графиков из цикла по списку столбцов фрейма данных

#python #matplotlib #foreach #seaborn

#python #matplotlib #foreach #seaborn

Вопрос:

Я хочу создать эффективный код, в котором я мог бы передавать набор столбцов фрейма данных для понимания цикла for или списка, и он вернет набор подзаголовков одного и того же типа (по одному для каждой переменной) в зависимости от типа matplotlib или seaborn plot, который я хочу использовать. Я ищу подход, который относительно не зависит от типа графика.

Я только пытался создать код, используя matplotlib. Ниже я привожу простой фрейм данных и последний код, который я пробовал.

 import pandas as pd
import matplotlib.pyplot as plt
%matplotlib inline
df = pd.DataFrame({"A": [1, 2,8,3,4,3], "B": [0, 2,4,8,3,2], "C": [0, 0,7,8,2,1]},
                 index =[1995,1996,1997,1998,1999,2000] )
df.index.name='Year'

fig, axs = plt.subplots(ncols=3,figsize=(8,4))
for  yvar in df:
    ts = pd.Series(yvar, index = df.index)
    ts.plot(kind = 'line',ax=axs[i])
    plt.show()
  

Я ожидаю увидеть вложенный график для каждой переменной, которая передается в цикл.

Ответ №1:

Это то, что вы ищете

 import pandas as pd
import matplotlib.pyplot as plt
df = pd.DataFrame({"A": [1, 2,8,3,4,3], "B": [0, 2,4,8,3,2], "C": [0, 0,7,8,2,1]},
                 index =[1995,1996,1997,1998,1999,2000] )

plt.figure(figsize=(10,10))
for i, col in enumerate(df.columns):
    plt.subplot(1,3,i 1)
    plt.plot(df.index, df[col], label=col)
    plt.xticks(df.index)
    plt.legend(loc='upper left')
plt.show()
  

введите описание изображения здесь

Используйте plt.subplot(no_of_rows, no_of_cols, current_subplot_number) для установки текущего графика на вложенный график. Любое выполненное построение пойдет current_subplot_number .

Ответ №2:

Проведите петлей по обоим столбцам и осям одновременно. Покажите график вне цикла.

 fig, axs = plt.subplots(ncols=len(df.columns), figsize=(8,4))
for ax, yvar in zip(axs.flat, df):
    df[yvar].plot(ax=ax)
plt.show()
  

В качестве альтернативы вы также можете напрямую отобразить полный фрейм данных

 fig, axs = plt.subplots(ncols=len(df.columns), figsize=(8,4))
df.plot(subplots=True, ax=axs)
plt.show()