Python 我的工厂地块的轴有什么问题?

Python 我的工厂地块的轴有什么问题?,python,pandas,matplotlib,seaborn,Python,Pandas,Matplotlib,Seaborn,我有这个数据集:。我将其加载如下: import numpy as np import pandas as pd import matplotlib.pyplot as plt %matplotlib inline import seaborn as sns import scipy.stats as st train = pd.read_csv("train.csv") 然后,我尝试以总质量为色调,按年份绘制销售价格: plt.figure(figsize = [8, 6]) sns.f

我有这个数据集:。我将其加载如下:

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

import seaborn as sns
import scipy.stats as st

train = pd.read_csv("train.csv")
然后,我尝试以总质量为色调,按年份绘制销售价格:

plt.figure(figsize = [8, 6])
sns.factorplot(
    x = 'YearBuilt',
    y = 'SalePrice', 
    data = train,
    kind='swarm',
    hue='OverallQual',
    palette = 'Set2')

plt.title('House Sale Prices (log scale) vs. Year Built and Overall Quality')
plt.xticks([1880, 1900, 1920, 1940, 1960, 1980, 2000], ['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()
这将导致以下图表:

如果我包括xlim或ylim,那么图形根本不会显示

我是新手,因此非常感谢您的帮助。

plt.style.use('ggplot'))
g=sns.catplot(
x=‘年建成’,
y=‘销售价格’,
数据=列车,
“蜂群”,
“总体质量”,
调色板='设置2',高度=6,纵横比=2)
locs,labels=plt.xticks()#如有必要,请使用,如下所述。
对于g轴平面中的轴:
对于ind,枚举中的标签(axes.getxticklabels()):
如果ind%8==0:#每n个标签保留一次
label.set_可见(True)
其他:
label.set_可见(False)
plt.title(‘房屋销售价格(对数比例)与建成年份和总体质量’)
plt.xlabel(“建成年份”)
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('售价($)')
plt.show()

笔记:
  • sns.factorplot
    不推荐用于
    sns.catplot
  • 问题是
    plt.xticks([18801900192019401960198020000],'1880','1900','1920','1940','1960','1980','2000'))
    试图替换112个xticks和xticklabel
    • 通过使用locs,labels=plt.xticks(),locs是一个从0到111的列表,而您尝试的loc是1880到2000,这就是为什么所有数据都在左侧。基本上,xaxis的范围现在是从0到2000
    • 年份数据只是一个
      int
      而不是
      datetime
  • 可能还有其他方法可以做到这一点
备选方案:
  • 在不更改X轴的情况下生成绘图,以获取
    locs,labels=plt.xticks()
    。标签是一个生成器函数,可以使用
    标签=[*标签]
    解包
  • type(labels[0])
    matplotlib.text.text
    ,因此要仅获取标签列表,请使用
    label\u t=[x.get\u text()表示标签中的x]
  • 仅列出轴线上所需年份的索引位置
years=['1880'、'1900'、'1920'、'1940'、'1960'、'1980'、'2000']
xticks=[年的标签索引(年)]
打印(xticks)
>>> [2, 9, 24, 43, 61, 81, 101]
情节
plt.style.use('ggplot'))
g=sns.catplot(
x=‘年建成’,
y=‘销售价格’,
数据=列车,
“蜂群”,
“总体质量”,
调色板='设置2',高度=6,纵横比=2)
plt.title(‘房屋销售价格(对数比例)与建成年份和总体质量’)
plt.xticks(xticks,['1880','1900','1920','1940','1960','1980','2000']
#plt.xlim([18722009])
plt.xlabel(“建成年份”)
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('售价($)')
plt.show()

  • 轴间距不均匀,因为并非所有年份都在数据集中
np.sort(train.yearbuild.unique())
数组([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],数据类型=int64)
  • 提供了处理记号的其他替代方法
plt.style.use('ggplot'))
g=sns.catplot(
x=‘年建成’,
y=‘销售价格’,
数据=列车,
“蜂群”,
“总体质量”,
调色板='设置2',高度=6,纵横比=2)
locs,labels=plt.xticks()#如有必要,请使用,如下所述。
对于g轴平面中的轴:
对于ind,枚举中的标签(axes.getxticklabels()):
如果ind%8==0:#每n个标签保留一次
label.set_可见(True)
其他:
label.set_可见(False)
plt.title(‘房屋销售价格(对数比例)与建成年份和总体质量’)
plt.xlabel(“建成年份”)
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('售价($)')
plt.show()

笔记:
  • sns.factorplot
    不推荐用于
    sns.catplot
  • 问题是
    plt.xticks([18801900192019401960198020000],'1880','1900','1920','1940','1960','1980','2000'))
    试图替换112个xticks和xticklabel
    • 通过使用locs,labels=plt.xticks(),locs是一个从0到111的列表,而您尝试的loc是1880到2000,这就是为什么所有数据都在左侧。基本上,xaxis的范围现在是从0到2000
    • 年份数据只是一个
      int
      而不是
      datetime
  • 可能还有其他方法可以做到这一点
备选方案:
  • 在不更改X轴的情况下生成绘图,以获取
    locs,labels=plt.xticks()
    。标签是一个生成器函数,可以使用
    标签=[*标签]
    解包
  • type(labels[0])
    matplotlib.text.text
    ,因此要仅获取标签列表,请使用
    label\u t=[x.get\u text()表示标签中的x]
  • 仅列出轴线上所需年份的索引位置