Значения X в Seaborn - PullRequest
       0

Значения X в Seaborn

0 голосов
/ 30 марта 2020

У меня есть следующий график. ось x - годы с 1960 по 2020 год. Я хочу сделать это читабельным и не могу найти хороший способ сделать это. Я пытаюсь это

ax = sns.barplot(x="Date",y="count",data=df1)

enter image description here

df:

    Date    count
0   1962    17
1   1963    2
2   1965    1
3   1966    14
4   1967    3
5   1968    4
6   1969    7
7   1970    24
8   1971    6
9   1973    25
10  1974    62
11  1975    23
12  1976    8
13  1977    3
14  1978    9
15  1979    9
16  1980    35
17  1981    15
18  1982    41
19  1983    19
20  1984    20
21  1985    9
22  1986    23
23  1987    62
24  1988    30
25  1989    15
26  1990    32
27  1991    20
28  1992    3
29  1993    4
30  1994    11
31  1995    2
32  1996    14
33  1997    38
34  1998    43
35  1999    52
36  2000    59
37  2001    60
38  2002    85
39  2003    34
40  2004    9
41  2005    4
42  2006    10
43  2007    29
44  2008    98
45  2009    68
46  2010    33
47  2011    54
48  2012    21
49  2013    6
50  2014    12
51  2015    26
52  2016    15
53  2018    29
54  2019    7
55  2020    19

Я пытался:

ax = ax.set_xticks(np.arange(1960, 2021,1))
plt.xticks(ax.get_xticks(), ax.get_xticks()  *5)
plt.yticks([1960, 1970, 1980, 1990, 2000, 2010])

Ни один из них не работает так, как хотелось бы.

Ответы [ 3 ]

3 голосов
/ 30 марта 2020

У вас есть данные с 1962 по 2020 год, это означает около 60 точек данных. Если у вас нет веских причин, читать 60 ярлыков сложно. Я предлагаю сделать одно из:

  1. Объединить данные за 5 или 10 лет подряд. Тогда у вас есть только 12 или 6 баров - легко обрабатывать глазом. Это также может привести к некоторому шумоподавлению (зависит от самих данных)

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

2 голосов
/ 30 марта 2020

Несмотря на то, что столбец с годами числовой, Seaborn отображает свои столбчатые диаграммы с категориальной осью X (то есть со всеми строками). Вы можете изменить тики, сначала сохранив тики и их метки в двух массивах, а затем покажите только их часть:

from matplotlib import pyplot as plt
import numpy as np
import pandas as pd
import seaborn as sns

df1 = pd.DataFrame(
    {'Date': [1962, 1963, 1965, 1966, 1967, 1968, 1969, 1970, 1971, 1973, 1974, 1975, 1976, 1977, 1978, 1979,
              1980, 1981, 1982, 1983, 1984, 1985, 1986, 1987, 1988, 1989, 1990, 1991, 1992, 1993, 1994, 1995,
              1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011,
              2012, 2013, 2014, 2015, 2016, 2018, 2019, 2020],
     'count': [17, 2, 1, 14, 3, 4, 7, 24, 6, 25, 62, 23, 8, 3, 9, 9, 35, 15, 41, 19, 20, 9, 23, 62, 30,
               15, 32, 20, 3, 4, 11, 2, 14, 38, 43, 52, 59, 60, 85, 34, 9, 4, 10, 29, 98, 68, 33, 54, 21,
               6, 12, 26, 15, 29, 7, 19]})
ax = sns.barplot(x="Date", y="count", data=df1)
ticks, labels = plt.xticks()
plt.xticks(ticks[::5], labels[::5])

plt.show()

seaborn plot Это может несколько запутать, потому что 3 года не хватает, что не ясно из сюжета. Кроме того, цвета по умолчанию в Seaborn могут сбивать с толку, поскольку они связаны только с течением времени.

Альтернативой является непосредственное использование matplotlib. В этом случае это довольно просто сделать. Matplotlib имеет числовую ось X и автоматически генерирует разумные тики. Кроме того, становится ясно, что 1964, 1972 и 2017 отсутствуют. При необходимости столбцы можно по-прежнему окрашивать в течение года.

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

# df1 = ...

plt.bar(df1["Date"], df1["count"], color='indigo', edgecolor='white')
plt.show()

matplotlib plot

PS: для окраски с использованием года:

cmap = plt.cm.rainbow
plt.bar(df1["Date"], df1["count"], color=[cmap((d-1962)/60) for d in df1["Date"]])
2 голосов
/ 30 марта 2020
# change the figure size
plt.figure(figsize=(20,5))

ax = sns.barplot(x="Date", y="count", data=df)

# rotate the labels
ax.set_xticklabels(ax.get_xticklabels(), rotation=45)
plt.show()

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...