這里的條形圖不是水平的柱狀圖。
使用函數(shù)stripplot繪制條形圖,執(zhí)行下面的代碼:
import seaborn as sns
import matplotlib.pyplot as plt
sns.set_theme()
fig, ax = plt.subplots(figsize=(6,6))
tips = sns.load_dataset('tips')
sns.stripplot(data=tips, x='total_bill', ax=ax)
plt.show()
程序輸出的結(jié)果見下圖。
這其實就是一個散點圖,只是一個維度的散點圖,而不需要兩個維度的散點。它要展示的不是兩個變量之間的關(guān)系,而是一個變量原始數(shù)據(jù)的散點分布。
當(dāng)然它也可以給定另一個維度,一般是一個分類變量,繪制分組的散點分布圖。執(zhí)行下面的代碼:
import seaborn as sns
import matplotlib.pyplot as plt
sns.set_theme()
fig, ax = plt.subplots(figsize=(6,6))
tips = sns.load_dataset('tips')
sns.stripplot(data=tips, x='total_bill', y='day', ax=ax)
plt.show()
程序輸出的結(jié)果見下圖。
改變x和y的數(shù)據(jù),就可以改變圖形的水平垂直方向了。執(zhí)行下面的代碼:
import seaborn as sns
import matplotlib.pyplot as plt
sns.set_theme()
fig, ax = plt.subplots(figsize=(6,6))
tips = sns.load_dataset('tips')
sns.stripplot(data=tips, y='total_bill', x='time', ax=ax)
plt.show()
程序輸出的結(jié)果見下圖。
類似地,使用hue作為分布變量,來繪制不同類別下的條形圖,執(zhí)行下面的代碼:
import seaborn as sns
import matplotlib.pyplot as plt
sns.set_theme()
fig, ax = plt.subplots(figsize=(6,6))
tips = sns.load_dataset('tips')
sns.stripplot(data=tips, x='time', y='total_bill', hue='time', ax=ax)
plt.show()
程序輸出的結(jié)果見下圖。
這和上一幅有什么本質(zhì)上的區(qū)別嘛?沒有,只是顏色有稍微的區(qū)別。
要是我們給定hue參數(shù)是另一個分類變量,那么得到的就是一個多分類下的條形圖了,執(zhí)行下面的代碼:
import seaborn as sns
import matplotlib.pyplot as plt
sns.set_theme()
fig, ax = plt.subplots(figsize=(6,6))
tips = sns.load_dataset('tips')
sns.stripplot(data=tips, x='total_bill', y='day', hue='size', ax=ax)
plt.show()
程序輸出的結(jié)果見下圖。
這樣子的散點圖中,有一個維度是沒有實際意義的,只是一個編號,那么另一個維度才表示散點的大小,所以才有波動。那我們有時候可能不需要這種波動,會得到一種很“奇怪”的線點圖,執(zhí)行下面的代碼:
import seaborn as sns
import matplotlib.pyplot as plt
sns.set_theme()
fig, ax = plt.subplots(figsize=(6,6))
tips = sns.load_dataset('tips')
sns.stripplot(data=tips, x='total_bill', y='day', hue='sex', dodge=True,
jitter=False, ax=ax)
plt.show()
程序輸出的結(jié)果見下圖。
這里散點分布在一條線上,通過指定參數(shù)jitter為True。指定參數(shù)dodge為True,表示分類變量下的數(shù)據(jù)是并排排列,就像直方圖中的參數(shù)作用一樣。
有關(guān)函數(shù)stripplot的更多用法請參考這里
https://seaborn.pydata.org/generated/seaborn.stripplot.html
上面都是在圖形水平下的函數(shù)實現(xiàn)的,下面使用Figure層面的函數(shù)catplot來繪制條形圖,執(zhí)行下面的代碼:
import seaborn as sns
import matplotlib.pyplot as plt
sns.set_theme()
tips = sns.load_dataset('tips')
fig = sns.catplot(data=tips, x='time', y='total_bill', hue='sex', col='day',
aspect=.5, kind='strip')
plt.show()
程序輸出的結(jié)果見下圖。
有關(guān)函數(shù)catplot的更多用法請參考這里
https://seaborn.pydata.org/generated/seaborn.catplot.html
箱線圖,也叫做五數(shù)圖。
使用函數(shù)boxplot來繪制箱線圖,執(zhí)行下面的代碼:
import seaborn as sns
import matplotlib.pyplot as plt
sns.set_theme()
titanic = sns.load_dataset('titanic')
fig, ax = plt.subplots(figsize=(6,6))
sns.boxplot(x=titanic['age'],ax=ax)
plt.show()
程序輸出的結(jié)果見下圖。
這里沒有使用數(shù)據(jù)data來繪圖,而是直接傳遞一個具體的原始數(shù)據(jù)。
繪制分組箱線圖很容易的,只需要執(zhí)行下面的代碼:
import seaborn as sns
import matplotlib.pyplot as plt
sns.set_theme()
titanic = sns.load_dataset('titanic')
fig, ax = plt.subplots(figsize=(6,6))
sns.boxplot(data=titanic, x='age', y='class', ax=ax)
plt.show()
程序輸出的結(jié)果見下圖。
通過參數(shù)hue來進(jìn)一步分類,執(zhí)行下面的代碼:
import seaborn as sns
import matplotlib.pyplot as plt
sns.set_theme()
titanic = sns.load_dataset('titanic')
fig, ax = plt.subplots(figsize=(6,6))
sns.boxplot(data=titanic, x='age', y='class', hue='alive', ax=ax, palette='PRGn')
plt.show()
程序輸出的結(jié)果見下圖。
可以傳遞一些matplotlib中boxplot的函數(shù),執(zhí)行下面的代碼:
import seaborn as sns
import matplotlib.pyplot as plt
sns.set_theme()
titanic = sns.load_dataset('titanic')
fig, ax = plt.subplots(figsize=(6,6))
sns.boxplot(data=titanic, x='age', y='class',notch=True, showcaps=False,
flierprops={'marker': 'x'},
boxprops={'facecolor': (.4, .6, .8, .5)},
medianprops={'color': 'coral'},ax=ax)
plt.show()
程序輸出的結(jié)果見下圖。
以上都是圖形層面的繪圖函數(shù),還可以通過Figure層面的箱線圖函數(shù)catplot來繪制。執(zhí)行下面的代碼:
import seaborn as sns
import matplotlib.pyplot as plt
sns.set_theme()
titanic = sns.load_dataset('titanic')
fig = sns.catplot(data=titanic, x='age', y='embarked',notch=True, showcaps=False,
flierprops={'marker': 'x'}, kind='box',
boxprops={'facecolor': (.4, .6, .8, .5)},
medianprops={'color': 'coral'}, aspect=1.3)
plt.show()
程序輸出的結(jié)果見下圖。
更多有關(guān)函數(shù)boxplot的用法請參考這里
https://seaborn.pydata.org/generated/seaborn.boxplot.html
小提琴圖使用函數(shù)violinplot。
小提琴圖是有箱線圖和核密度曲線組成的,是一個對稱的圖形。
繪制一個簡單的小提琴圖,執(zhí)行下面的代碼:
import seaborn as sns
import matplotlib.pyplot as plt
sns.set_theme()
titanic = sns.load_dataset('titanic')
fig, ax = plt.subplots(figsize=(6,6))
sns.violinplot(data=titanic, x='age', ax=ax)
plt.show()
程序輸出的結(jié)果見下圖。
在給定一個分類變量,通過另一個維度y指定即可,繪制分組小提琴圖,執(zhí)行下面的代碼:
import seaborn as sns
import matplotlib.pyplot as plt
sns.set_theme()
iris = sns.load_dataset('iris')
fig, ax = plt.subplots(figsize=(6,6))
sns.violinplot(data=iris, x='species', y='sepal_length', ax=ax)
plt.show()
程序輸出的結(jié)果見下圖。
再使用參數(shù)hue給定另一個分組變量,繪制雙分組下的小提琴圖,執(zhí)行下面的代碼:
import seaborn as sns
import matplotlib.pyplot as plt
sns.set_theme()
titanic = sns.load_dataset('titanic')
fig, ax = plt.subplots(figsize=(6,6))
sns.violinplot(data=titanic, x='class', y='age', hue='alive', ax=ax)
plt.show()
程序輸出的結(jié)果見下圖。
剛剛說到了,小提琴圖本來是一個對稱的圖形,因此我們可以只需要一邊就好了,那么我們在繪制分組的小提琴圖時,可以通過指定參數(shù)split為True使得小提琴圖只保留一邊,執(zhí)行下面的代碼:
import seaborn as sns
import matplotlib.pyplot as plt
sns.set_theme()
titanic = sns.load_dataset('titanic')
fig, ax = plt.subplots(figsize=(6,6))
sns.violinplot(data=titanic, x='deck', y='age', hue='alive', split=True, ax=ax)
plt.show()
程序輸出的結(jié)果見下圖。
通過參數(shù)bw來設(shè)置核密度估計曲線的窗寬,執(zhí)行代碼如下:
import seaborn as sns
import matplotlib.pyplot as plt
sns.set_theme()
titanic = sns.load_dataset('titanic')
fig, ax = plt.subplots(figsize=(6,6))
sns.violinplot(data=titanic, x='age', y='alive', bw=.15, ax=ax)
plt.show()
程序輸出的結(jié)果見下圖。
小提琴圖中間可以不是箱線圖的箱子,也可以是其他的,通過參數(shù)inner來指定,執(zhí)行下面的代碼:
import seaborn as sns
import matplotlib.pyplot as plt
sns.set_theme()
titanic = sns.load_dataset('titanic')
fig, ax = plt.subplots(figsize=(10,6))
sns.violinplot(data=titanic, x='age', y='embark_town', inner='quartile', ax=ax)
plt.show()
程序輸出的結(jié)果見下圖。
這里給出的就只是三個分位數(shù)了,中位數(shù),兩個四分位數(shù)。
有關(guān)函數(shù)violinplot的更多用法請參考這里
https://seaborn.pydata.org/generated/seaborn.violinplot.html
這是圖形層面的函數(shù),還可以通過catplot來繪制小提琴圖,執(zhí)行代碼如下:
import seaborn as sns
import matplotlib.pyplot as plt
sns.set_theme()
titanic = sns.load_dataset('titanic')
fig = sns.catplot(data=titanic, x='age', y='embark_town', hue='class', inner='point',
aspect=1.2,kind='violin')
plt.show()
程序輸出的結(jié)果見下圖。
什么點圖,這個名字是我自己瞎起的。使用函數(shù)pointplot完成。
執(zhí)行下面的代碼:
import seaborn as sns
import matplotlib.pyplot as plt
sns.set_theme()
penguins = sns.load_dataset('penguins')
fig, ax=plt.subplots(figsize=(6,6))
sns.pointplot(data=penguins, x='island', y='body_mass_g', ax=ax)
plt.show()
程序輸出的結(jié)果見下圖。
點圖是估計一個數(shù)值型變量的某個估計量的,并且給出這個估計量的誤差。它默認(rèn)就是估計總體均值的,以樣本均值來估計。所以那個點就是樣本均值,那個errorbar是百分之95的置信區(qū)間。
給定一個分類變量,繼續(xù)做估計,執(zhí)行下面的代碼:
import seaborn as sns
import matplotlib.pyplot as plt
sns.set_theme()
penguins = sns.load_dataset('penguins')
fig, ax=plt.subplots(figsize=(6,6))
sns.pointplot(data=penguins, x='island', y='body_mass_g', hue='sex', ax=ax,
markers=['^', 's'],seed=10, n_boot=2000, errorbar='sd')
plt.show()
程序輸出的結(jié)果見下圖。
有關(guān)函數(shù)pointplot的更多參數(shù)使用,請參考這里
https://seaborn.pydata.org/generated/seaborn.pointplot.html
再來看使用Figure層面的繪圖函數(shù),執(zhí)行下面的代碼:
import seaborn as sns
import matplotlib.pyplot as plt
sns.set_theme()
penguins = sns.load_dataset('penguins')
fig = sns.catplot(kind='point', data=penguins, x='body_mass_g', y='island',
errorbar=('pi', 100), capsize=.4, join=False, color='.5', aspect=1.2)
plt.show()
程序輸出的結(jié)果見下圖。
繪制一個分類變量的柱狀圖,使用函數(shù)countplot,而不是barplot。
執(zhí)行下面的代碼:
import seaborn as sns
import matplotlib.pyplot as plt
sns.set_theme()
penguins = sns.load_dataset('penguins')
fig, ax = plt.subplots(figsize=(6,6))
sns.countplot(data=penguins, x='island', ax=ax)
plt.show()
程序輸出的結(jié)果見下圖。
繪制兩個分類變量下的柱狀圖,執(zhí)行下面的代碼:
import seaborn as sns
import matplotlib.pyplot as plt
sns.set_theme()
penguins = sns.load_dataset('penguins')
fig, ax = plt.subplots(figsize=(6,6))
sns.countplot(data=penguins, x='island', hue='sex', ax=ax)
plt.show()
程序輸出的結(jié)果見下圖。
這是并排排列的,要是想要繪制堆疊柱狀圖,只需要指定參數(shù)dodge為False即可,執(zhí)行下面的代碼:
import seaborn as sns
import matplotlib.pyplot as plt
sns.set_theme()
penguins = sns.load_dataset('penguins')
fig, ax = plt.subplots(figsize=(10,6))
sns.countplot(data=penguins, y='island', hue='sex', dodge=False, ax=ax)
plt.show()
程序輸出的結(jié)果見下圖。
這實際上不叫作堆疊條形圖,這可能叫做重疊條形圖。
那可不可以繪制三分類變量的柱狀圖?其實就是三維列聯(lián)表下的圖示罷了,目前來說,Seaborn還做不到,沒有現(xiàn)成的API。在后面可以借助分面即子圖的方式來展示,這也是一般的處理方法。
更多有關(guān)countplot函數(shù)的用法,請參考這里
https://seaborn.pydata.org/generated/seaborn.countplot.html
那對于一個分類變量和一個數(shù)值型變量的柱狀圖,這種柱狀圖是展示該數(shù)值變量的數(shù)字特征,一般均值,中位數(shù)啥的,使用函數(shù)barplot,它可以繪制errorbar,執(zhí)行下面的代碼:
import seaborn as sns
import matplotlib.pyplot as plt
sns.set_theme()
penguins = sns.load_dataset('penguins')
fig, ax = plt.subplots(figsize=(10,5))
sns.barplot(data=penguins, x='bill_length_mm', y='island', ax=ax, width=0.5)
plt.show()
程序輸出的結(jié)果見下圖。
通過hue來設(shè)置另一個分類變量,執(zhí)行下面的代碼:
import seaborn as sns
import matplotlib.pyplot as plt
sns.set_theme()
penguins = sns.load_dataset('penguins')
fig, ax = plt.subplots(figsize=(6,6))
sns.barplot(data=penguins, y='bill_length_mm', x='island', hue='sex', ax=ax, width=0.4)
plt.show()
程序輸出的結(jié)果見下圖。
通過estimator和errorbar來指定要估計的參數(shù),執(zhí)行下面的代碼:
import seaborn as sns
import matplotlib.pyplot as plt
sns.set_theme()
penguins = sns.load_dataset('penguins')
fig, ax = plt.subplots(figsize=(6,6))
sns.barplot(data=penguins, y='body_mass_g', x='island', hue='sex', ax=ax, width=0.4,
estimator='std', errorbar=('ci',90), palette='PRGn', seed=10, n_boot=200)
plt.show()
程序輸出的結(jié)果見下圖。
更多有關(guān)barplot函數(shù)的用法,請參考這里
https://seaborn.pydata.org/generated/seaborn.barplot.html
下面再看一個Figure層面的bar繪圖函數(shù),執(zhí)行下面的代碼:
import seaborn as sns
import matplotlib.pyplot as plt
sns.set_theme()
penguins = sns.load_dataset('penguins')
fig = sns.catplot(kind='bar', data=penguins, x='body_mass_g', y='island',
errorbar=('pi', 50), capsize=.4,errcolor='.5', linewidth=3,
edgecolor='.5', facecolor=(0, 0, 0, 0),aspect=1.3)
plt.show()
程序輸出的結(jié)果見下圖。
聯(lián)系客服