# 2.1.7.3.Categorical Plots

## 0. Categorical Plots的繪圖種類

* sns.barplot
* sns.countplot
* sns.boxplot
* sns.stripplot
* sns.violinplot
* sns.swarmplot
* sns.factorplot

## 1. 使用library

```
import seaborn as sns
```

* 將圖表直接嵌入到Notebook之中

```
%matplotlib inline
```

* 讀入資料

```
tips = sns.load_dataset('tips')
tips.head()
```

![](https://github.com/jenhsuan/python/tree/8fc9c0b8df4ccd709d3078c2d8842af0932de09d/assets/%E8%9E%A2%E5%B9%95%E5%BF%AB%E7%85%A7%202018-05-19%20%E4%B8%8A%E5%8D%889.13.50.png)

## 2.bar plot

* 矩形高度默認為平均值 (可以用estimator調整), 誤差棒長度為允許誤差的範圍, 默認為95 (可以用ci調整)

```
sns.barplot(x='sex',y='total_bill',data=tips)
```

![](https://github.com/jenhsuan/python/tree/8fc9c0b8df4ccd709d3078c2d8842af0932de09d/assets/%E8%9E%A2%E5%B9%95%E5%BF%AB%E7%85%A7%202018-05-19%20%E4%B8%8B%E5%8D%888.40.22.png)

```
import numpy as np
sns.barplot(x='sex',y='total_bill',data=tips,estimator=np.std)
```

![](https://github.com/jenhsuan/python/tree/8fc9c0b8df4ccd709d3078c2d8842af0932de09d/assets/%E8%9E%A2%E5%B9%95%E5%BF%AB%E7%85%A7%202018-05-19%20%E4%B8%8B%E5%8D%888.43.44.png)

* [參考資料](https://blog.csdn.net/qq_39949963/article/details/79371141)

## 3.countplot(計數圖)

* 只要給x就好了
  * 可應用在比較不同類別間的數量

    ```
    sns.countplot(x='sex', hue ='size', data=tips)
    ```

    ![](https://github.com/jenhsuan/python/tree/8fc9c0b8df4ccd709d3078c2d8842af0932de09d/assets/%E8%9E%A2%E5%B9%95%E5%BF%AB%E7%85%A7%202018-05-19%20%E4%B8%8B%E5%8D%888.55.09.png)
* [參考資料](https://zhuanlan.zhihu.com/p/24553277)

## 4.boxplot

* [由上到下分別代表上邊緣, 上四分位數, 中位數, 下四分位數, 下邊緣, 點為outlier](https://blog.csdn.net/u013082989/article/details/73278458)

```
sns.boxplot(x='day',y='total_bill',data=tips)
```

![](https://github.com/jenhsuan/python/tree/8fc9c0b8df4ccd709d3078c2d8842af0932de09d/assets/%E8%9E%A2%E5%B9%95%E5%BF%AB%E7%85%A7%202018-05-19%20%E4%B8%8B%E5%8D%889.01.03.png)

* 也可以指定想要比較的類別

```
sns.boxplot(x='day',y='total_bill',data=tips, hue='smoker')
```

![](https://github.com/jenhsuan/python/tree/8fc9c0b8df4ccd709d3078c2d8842af0932de09d/assets/%E8%9E%A2%E5%B9%95%E5%BF%AB%E7%85%A7%202018-05-19%20%E4%B8%8B%E5%8D%889.01.57.png)

## 5.stripplot

* 散點圖, 用來表示數據分佈情形

```
sns.stripplot(x='day',y='total_bill',data=tips)
```

![](https://github.com/jenhsuan/python/tree/8fc9c0b8df4ccd709d3078c2d8842af0932de09d/assets/%E8%9E%A2%E5%B9%95%E5%BF%AB%E7%85%A7%202018-05-19%20%E4%B8%8B%E5%8D%889.10.39.png)

* 增加抖動程度

```
sns.stripplot(x='day',y='total_bill',data=tips,jitter=True)
```

![](https://github.com/jenhsuan/python/tree/8fc9c0b8df4ccd709d3078c2d8842af0932de09d/assets/%E8%9E%A2%E5%B9%95%E5%BF%AB%E7%85%A7%202018-05-19%20%E4%B8%8B%E5%8D%889.10.45.png)

* 類別間的比較

```
sns.stripplot(x='day',y='total_bill',data=tips,jitter=True,hue='sex')
```

![](https://github.com/jenhsuan/python/tree/8fc9c0b8df4ccd709d3078c2d8842af0932de09d/assets/%E8%9E%A2%E5%B9%95%E5%BF%AB%E7%85%A7%202018-05-19%20%E4%B8%8B%E5%8D%889.12.17.png)

## 6.violinplot

* boxplot決定了四分位數的位置, violinplot展示了任意位置的密度, 通過violinplot可以知道哪些位置的密度較高

```
sns.violinplot(x='day',y='total_bill',data=tips)
```

![](https://github.com/jenhsuan/python/tree/8fc9c0b8df4ccd709d3078c2d8842af0932de09d/assets/%E8%9E%A2%E5%B9%95%E5%BF%AB%E7%85%A7%202018-05-19%20%E4%B8%8B%E5%8D%889.27.35.png)

* 類別間的比較

```
sns.violinplot(x='day',y='total_bill',data=tips,hue='sex',split=True)
```

![](https://github.com/jenhsuan/python/tree/8fc9c0b8df4ccd709d3078c2d8842af0932de09d/assets/%E8%9E%A2%E5%B9%95%E5%BF%AB%E7%85%A7%202018-05-19%20%E4%B8%8B%E5%8D%889.27.41.png)

## 7.swarmplot

* 有分布趨勢的散點圖

```
sns.swarmplot(x='day',y='total_bill',data=tips)
```

![](https://github.com/jenhsuan/python/tree/8fc9c0b8df4ccd709d3078c2d8842af0932de09d/assets/%E8%9E%A2%E5%B9%95%E5%BF%AB%E7%85%A7%202018-05-19%20%E4%B8%8B%E5%8D%889.32.29.png)

* 類別間的比較

```
sns.swarmplot(x='day',y='total_bill',data=tips, hue='sex')
```

![](https://github.com/jenhsuan/python/tree/8fc9c0b8df4ccd709d3078c2d8842af0932de09d/assets/%E8%9E%A2%E5%B9%95%E5%BF%AB%E7%85%A7%202018-05-19%20%E4%B8%8B%E5%8D%889.32.36.png)

* violinplot + swarmplot

```
sns.violinplot(x='day',y='total_bill',data=tips)
sns.swarmplot(x='day',y='total_bill',data=tips, color='black')
```

![](https://github.com/jenhsuan/python/tree/8fc9c0b8df4ccd709d3078c2d8842af0932de09d/assets/%E8%9E%A2%E5%B9%95%E5%BF%AB%E7%85%A7%202018-05-19%20%E4%B8%8B%E5%8D%889.35.31.png)

## 8.factorplot

* 萬用的plot

```
sns.factorplot(x='day',y='total_bill',data=tips, kind='bar')
```

![](https://github.com/jenhsuan/python/tree/8fc9c0b8df4ccd709d3078c2d8842af0932de09d/assets/%E8%9E%A2%E5%B9%95%E5%BF%AB%E7%85%A7%202018-05-19%20%E4%B8%8B%E5%8D%889.36.51.png)
