BoxPlot: Как отобразить годовое значение вместо квартального значения? - PullRequest
0 голосов
/ 09 февраля 2019

У меня есть датафрейм, который содержит столбцы "квартал" и "цена перепродажи".Я использовал dataframe для построения коробочного графика, используя seaborn.На блок-графике отображается квартальное значение, например (2007-Q2, 2007-Q3, 2007-Q4, 2008-Q2).Тем не менее, я хочу, чтобы он отображал годовое значение, например (2007, 2008, 2009).Как мне этого добиться?

import seaborn as sns

data = {
    'quarter': ['2007-Q2', '2007-Q2', '2007-Q2', '2007-Q2', '2007-Q3', 
            '2007-Q3', '2007-Q3', '2007-Q3', '2007-Q4', '2007-Q4', 
            '2007-Q4', '2007-Q4', '2008-Q2', '2008-Q2', '2008-Q2', 
            '2008-Q2','2008-Q3', '2008-Q3', '2008-Q3', '2008-Q3',  
            '2008-Q4', '2008-Q4', '2008-Q4', '2008-Q4', '2009-Q2', 
            '2009-Q2', '2009-Q2', '2009-Q2', '2009-Q3', '2009-Q3', 
            '2009-Q3', '2009-Q3', '2009-Q4', '2009-Q4', '2009-Q4',
            '2009-Q4',  '2010-Q2','2010-Q2', '2010-Q2', '2010-Q2',
            '2010-Q3', '2010-Q3', '2010-Q3', '2010-Q3', '2010-Q4',
            '2010-Q4', '2010-Q4', '2010-Q4'],

'resale_price': [172000, 260000, 372000, 172000, 224500, 224500, 
                311500, 358800, 438000, 344000, 182200, 261300, 372000, 
                172000, 224500, 224240, 311500, 358800, 438000, 344900,
                172000, 260000, 372000, 172000, 224500, 224500, 311500, 
                358800, 438000, 394000, 172400, 360000, 172000, 472000, 
                254500, 226510, 321600, 358800, 438800, 394000, 155400, 
                465000, 232000, 475090, 244520, 236518, 321100, 398901]
    }

df = pd.DataFrame(data)

plt.figure(figsize=(12,6))
ax = sns.boxplot(data = df, x='quarter', y='resale_price')

for item in ax.get_xticklabels():
   item.set_rotation(90)

Output

Ответы [ 2 ]

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

Как я понимаю вопрос, вы хотели бы иметь только 4 коробки, по одной в год.Этого можно достичь, извлекая год из столбца «квартал» и используя новый столбец «год» в качестве входных данных для функции seaborn.

import matplotlib.pyplot as plt
import pandas as pd
import seaborn as sns

data = # ... as defined in question

df = pd.DataFrame(data)
df["year"], _ = df['quarter'].str.split('-', 1).str

plt.figure(figsize=(12,6))
ax = sns.boxplot(data = df, x='year', y='resale_price')

plt.show()

enter image description here

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

Использовать set_xticklabels с индексированием - первые 4 значения строк, также установить rotation:

ax.set_xticklabels(df['quarter'].str[:4], rotation='vertical')

И цикл должен быть удален:

for item in ax.get_xticklabels():
   item.set_rotation(90)

При необходимости для каждого года отдельный участок:

df['year'] = df['quarter'].str[:4]
ax = sns.boxplot(data = df, x='year', y='resale_price')
...