plt.style.use('ggplot')
g = sns.catplot(
x = 'YearBuilt',
y = 'SalePrice',
data = train,
kind='swarm',
hue='OverallQual',
palette = 'Set2', height=6, aspect=2)
locs, labels = plt.xticks() # use if needed, as explained below.
for axes in g.axes.flat:
for ind, label in enumerate(axes.get_xticklabels()):
if ind % 8 == 0: # every nth label is kept
label.set_visible(True)
else:
label.set_visible(False)
plt.title('House Sale Prices (log scale) vs. Year Built and Overall Quality')
plt.xlabel('Year Built')
plt.yscale('log')
plt.ylim([4e4, 6e5])
plt.yticks([6e4, 1e5, 1.4e5, 1.8e5, 2.4e5, 3.2e5, 4e5, 6e5], ['60k', '100k', '140K', '180k', '240K', '320k', '600k'])
plt.ylabel('Sale Price ($)')
plt.show()
![enter image description here](https://i.stack.imgur.com/xENOL.png)
Примечания:
sns.factorplot
устарело для sns.catplot
- Проблема
plt.xticks([1880, 1900, 1920, 1940, 1960, 1980, 2000], ['1880', '1900', '1920', '1940', '1960', '1980', '2000'])
пытается заменить 112 xticks и xticklabels - Используя
locs, labels = plt.xticks()
, locs - это список от 0 до 111, в то время как вы пытаетесь найти, это 1880-2000, поэтому все данные включены. левая сторона. По сути, диапазон xaxis теперь составляет от 0 до 2000. - Данные года - это просто
int
, а не datetime
- Возможно, есть и другие способы сделайте это.
Альтернатива:
- Создайте график, не изменяя xaxis, чтобы получить
locs, labels = plt.xticks()
. Ярлыки являются функцией генератора и могут быть распакованы с labels = [*labels]
. type(labels[0])
равно matplotlib.text.Text
, поэтому, чтобы получить список только меток, используйте label_t = [x.get_text() for x in labels]
. - Make список только местоположений указателей для нужных лет на оси
years = ['1880', '1900', '1920', '1940', '1960', '1980', '2000']
xticks = [label_t.index(year) for year in years]
print(xticks)
>>> [2, 9, 24, 43, 61, 81, 101]
Участок
plt.style.use('ggplot')
g = sns.catplot(
x = 'YearBuilt',
y = 'SalePrice',
data = train,
kind='swarm',
hue='OverallQual',
palette = 'Set2', height=6, aspect=2)
plt.title('House Sale Prices (log scale) vs. Year Built and Overall Quality')
plt.xticks(xticks, ['1880', '1900', '1920', '1940', '1960', '1980', '2000'])
# plt.xlim([1872,2009])
plt.xlabel('Year Built')
plt.yscale('log')
# plt.ylim([4e4, 6e5])
plt.yticks([6e4, 1e5, 1.4e5, 1.8e5, 2.4e5, 3.2e5, 4e5, 6e5], ['60k', '100k', '140K', '180k', '240K', '320k', '600k'])
plt.ylabel('Sale Price ($)')
plt.show()
![enter image description here](https://i.stack.imgur.com/e9mme.png)
- Интервал между осями не равен даже тому, что не все годы указаны в наборе данных.
np.sort(train.YearBuilt.unique())
array([1872, 1875, 1880, 1882, 1885, 1890, 1892, 1893, 1898, 1900, 1904,
1905, 1906, 1908, 1910, 1911, 1912, 1913, 1914, 1915, 1916, 1917,
1918, 1919, 1920, 1921, 1922, 1923, 1924, 1925, 1926, 1927, 1928,
1929, 1930, 1931, 1932, 1934, 1935, 1936, 1937, 1938, 1939, 1940,
1941, 1942, 1945, 1946, 1947, 1948, 1949, 1950, 1951, 1952, 1953,
1954, 1955, 1956, 1957, 1958, 1959, 1960, 1961, 1962, 1963, 1964,
1965, 1966, 1967, 1968, 1969, 1970, 1971, 1972, 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], dtype=int64)