最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Matplotlib可視化之使用pandas和Seaborn繪制精美圖表詳解

 更新時間:2025年12月09日 09:46:56   作者:哪里的破水瓶  
這篇文章主要為大家詳細介紹了Matplotlib可視化之使用pandas和Seaborn繪制精美圖表的相關(guān)內(nèi)容,文中的示例代碼講解詳細,感興趣的小伙伴可以了解下

Matplotlib 可視化

入門演示

matplotlib 的繪圖基本步驟:

  • 創(chuàng)建畫布
  • 準(zhǔn)備數(shù)據(jù)集,X軸,Y軸
  • 可選:顏色,線型,標(biāo)簽,網(wǎng)格,圖例,標(biāo)題,坐標(biāo)軸標(biāo)簽。
  • 繪制圖像
import matplotlib.pyplot as plt
# 創(chuàng)建一個10英寸的寬和5英寸的高的畫布
# dpi 點數(shù) 80,表示清晰度。
# 10 * 80,5 * 80
plt.figure(figsize=(10, 5), dpi=80)

# 準(zhǔn)備數(shù)據(jù)
x = [1, 2, 3, 4, 5, 6, 7]
y = [6, 2, 10, 14, 21, 25, 30]

# 準(zhǔn)備繪制
plt.plot(x, y) # 折線圖

# 展示圖
plt.show()

設(shè)置刻度尺,配置中文

import matplotlib.pyplot as plt
# 設(shè)置中文
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False

通過 plt.xticksplt.yticks 設(shè)置對應(yīng)的刻度尺

# 返回一個迭代對象,0 - 60,這是 X軸
x = range(60)

# y 軸,范圍 15 ~ 18
y = [random.uniform(15, 18) for i in x]

# 創(chuàng)建畫布
plt.figure(figsize=(10, 5), dpi=80)

# 繪制圖像
plt.plot(x, y)

# 自定義X軸和Y軸
x_ticks_label = [f'11點{i}分' for i in x]
y_ticks_label = [i for i in range(0, 25)]

# 具體設(shè)置,但是如果不切片,那會顯得很密集,所以需要切片,注意必須都切片
plt.xticks(x[::5], x_ticks_label[::5])
plt.yticks(y_ticks_label[::5])

# 顯示
plt.show()

添加網(wǎng)格,標(biāo)題

主要實現(xiàn)plt.grid

  • linestyle:設(shè)置線風(fēng)格。
    • (-)實線
    • (--)虛線
    • (-.)一個杠一個.
    • (:)兩個點
    • (' ')留空、空格
  • alpha:設(shè)置透明度,最大1,最小0

設(shè)置標(biāo)題 / 保存為圖片

  • xlabel
  • ylabel
  • title
  • savefig
import matplotlib.pyplot as plt
import random
x = range(60)
y = [random.uniform(15, 18) for i in x]
plt.figure(figsize=(10, 5), dpi=80)
plt.plot(x, y)

# 自定義X軸和Y軸
x_ticks_label = [f'11點{i}分' for i in x]
y_ticks_label = [i for i in range(0, 25)]

plt.xticks(x[::5], x_ticks_label[::5])
plt.yticks(y_ticks_label[::5])

# 添加網(wǎng)格
plt.grid(linestyle=':', alpha=1)

# 添加標(biāo)簽
plt.xlabel('時間', fontsize=15)
plt.ylabel('溫度', fontsize=15)
# 添加標(biāo)題
plt.title('溫度變化曲線', fontsize=20)

plt.savefig('temp.png')

plt.show()

一張圖繪制多個 / 增加圖例

繪制多個圖的關(guān)鍵點,給每個plot要加一個label,表示名字,后續(xù)圖例使用。

  • color 用于設(shè)置顏色,生成的圖例有顏色。
  • label 文字
# 準(zhǔn)備數(shù)據(jù)
x = range(60)
# 第一個圖的數(shù)據(jù)
y = [random.uniform(15, 18) for i in x]
# 第二個圖的數(shù)據(jù)
m = [random.uniform(1, 10) for i in x]
plt.figure(figsize=(10, 5), dpi=80)

# 繪制第一個線
plt.plot(x, y, label='北京')
# 繪制第二個線
plt.plot(x, m, label='摩訶')
顏色字符風(fēng)格字符
r 紅色- 實線
g 綠色- - 虛線
b 藍色-. 點劃線
w 白色: 點虛線
c 青色' ' 留空、空格
m 洋紅
y 黃色
k 黑色

加圖例的關(guān)鍵代碼,loc 設(shè)置 best,表示自動匹配最好的位置。這個 loc 會根據(jù) label 來匹配,如果在繪制時沒設(shè)置 label,不會生成的。

loc 設(shè)置圖例位置

# 增加圖例
plt.legend(loc='best')

設(shè)置位置

位置 string位置代碼
'best'0
'upper right'1
'upper left'2
'lower left'3
'lower right'4
'right'5
'center left'6
'center right'7
'lower center'8
'upper center'9
'center'10

完整代碼演示

import matplotlib.pyplot as plt
import random
# 準(zhǔn)備數(shù)據(jù)
x = range(60)
# 第一個圖的數(shù)據(jù)
y = [random.uniform(15, 18) for i in x]
# 第二個圖的數(shù)據(jù)
m = [random.uniform(1, 10) for i in x]
plt.figure(figsize=(10, 5), dpi=80)

# 繪制第一個線
plt.plot(x, y, label='北京', color='r')
# 繪制第二個線
plt.plot(x, m, label='摩訶', color='c')

# 增加圖例
plt.legend(loc='best')

x_ticks_label = [f'11點{i}分' for i in x]
y_ticks_label = [i for i in range(0, 25)]
plt.xticks(x[::5], x_ticks_label[::5])
plt.yticks(y_ticks_label[::5])
plt.grid(linestyle=':', alpha=1)
plt.xlabel('時間', fontsize=15)
plt.ylabel('溫度', fontsize=15)
plt.title('溫度變化曲線', fontsize=20)
plt.show()

多個坐標(biāo)系,在一個畫布

主要是通過下面,獲取到了分割后的畫布,對每個畫布進行單獨設(shè)置。

fig, ax = plt.subplots(figsize=(20, 8), nrows=1, ncols=2)

完整代碼

import matplotlib.pyplot as plt
import random
# 準(zhǔn)備數(shù)據(jù)
x = range(60)
y = [random.uniform(15, 18) for i in x]
m = [random.uniform(1, 10) for i in x]

# 面向?qū)ο罄L圖,fig -> 畫布(1行2列的畫布),ax -> 坐標(biāo)系
fig, ax = plt.subplots(figsize=(20, 8), nrows=1, ncols=2)

# 繪制圖像
ax[0].plot(x, y, color='r', label='北京')
ax[1].plot(x, m, color='c', label='摩訶')

# 添加刻度
# 刻度變量
x_ticks_label = [f'11點{i}分' for i in x]
y_ticks_label = [i for i in range(0, 25)]

# 具體添加刻度的操作
ax[0].set_xticks(x[::5])  # 圖 1 的 x軸
ax[0].set_yticks(y_ticks_label[::5])  # 圖 1 的 y軸
ax[0].set_xticklabels(x_ticks_label[::5])  # 圖 1 的 x軸的值

# 具體添加刻度的操作
ax[1].set_xticks(x[::5])  # 圖 1 的 x軸
ax[1].set_yticks(y_ticks_label[::5])  # 圖 1 的 y軸
ax[1].set_xticklabels(x_ticks_label[::5])  # 圖 1 的 x軸的值
plt.show()

目前是這樣,我們繼續(xù)添加

設(shè)置 x y 軸的標(biāo)題和大小

ax[0].set_ylabel('溫度')
ax[0].set_xlabel('時間')
ax[0].set_title('一段時間的溫度變化', fontsize=20)

ax[1].set_ylabel('溫度')
ax[1].set_xlabel('時間')
ax[1].set_title('一段時間的溫度變化', fontsize=20)


# 添加圖例
ax[0].legend(loc='best')
ax[1].legend(loc=0)

# 保存圖片
plt.savefig('test.png')

plt.show()

其他圖像繪制

matplotlib.org/stable/gallery/index.html 官方案例庫

  • 折線圖用來看趨勢
  • 柱狀圖用來看對比
  • 直方圖用來展示數(shù)據(jù)的分布情況
  • 散點圖用來描述兩個連續(xù)變量之間的關(guān)系

繪制柱狀圖

import matplotlib.pyplot as plt
# 1. 準(zhǔn)備數(shù)據(jù)
x = ['A', 'B', 'C', 'D', 'E']
y = [3, 6, 1, 8, 2]

# 額外可以設(shè)置畫布大小
plt.figure(figsize=(20,8))

# 2. 繪制柱狀圖
plt.bar(x, y, color='r')

# 3. 設(shè)置 x軸,y軸標(biāo)簽 和標(biāo)題
plt.xlabel('分類名')
plt.ylabel('商品個數(shù)')
plt.title('商品分類統(tǒng)計圖', fontsize=15)
plt.show()

繪制直方圖

由一系列高度不等的縱向條紋或線段表示數(shù)據(jù)分布的情況。 一般用橫軸表示數(shù)據(jù)范圍,縱軸表示分布情況。

特點:繪制連續(xù)性的數(shù)據(jù)展示一組或者多組數(shù)據(jù)的分布狀況(統(tǒng)計)

import matplotlib.pyplot as plt
import numpy as np
# 1. 準(zhǔn)備數(shù)據(jù)
data = np.random.randn(500)

# 2. 創(chuàng)建面板
plt.figure(figsize=(20, 8))

# 3. 繪制圖形,rwidth 柱子之間的寬度,bins 柱子大小
plt.hist(data, bins=20, color='r', alpha=0.5, rwidth=0.8)

# 4. 顯示
plt.show()

繪制餅圖

import matplotlib.pyplot as plt
# 準(zhǔn)備數(shù)據(jù)
sizes = [25, 35, 25, 15]
# 分類標(biāo)簽
labels = ['電腦', '手機', '鍵盤', '鼠標(biāo)']

# 就提繪圖動作, autopct 顯示百分比
plt.pie(sizes, labels=labels, autopct='%1.1f%%')
# 設(shè)置圖表標(biāo)題
plt.title("Simple Pie Chart")
plt.show()

散點圖

import matplotlib.pyplot as plt

x = [1, 2, 3, 4, 5]
y = [2, 3, 5, 7, 11]

plt.scatter(x, y, color='red')  # 繪制紅色散點圖
plt.title("Simple Scatter Plot")  # 設(shè)置圖表標(biāo)題
plt.xlabel("X-axis")  # 設(shè)置X軸標(biāo)簽
plt.ylabel("Y-axis")  # 設(shè)置Y軸標(biāo)簽
plt.show()  # 顯示圖表

pandas 繪圖

要統(tǒng)計個數(shù)的兩種方式

# 思路一:稍微復(fù)雜一點
# df.groupby('province')['province'].count().sort_values(ascending=False).head(10)
df['province'].value_counts()

柱狀圖

df['province'].value_counts().head(10).plot.bar(fontsize=15, figsize=(10,6), color=['r', 'g', 'b', 'y', 'c', 'm', 'k', 'pink', 'gray', 'orange'])

面積圖

kwords = dict(fontsize=15, figsize=(10, 6), color=['r', 'g', 'b', 'y', 'c', 'm', 'k', 'pink', 'gray', 'orange'])
df['province'].value_counts().head(10).plot.area(**kwords)

案例

獲取產(chǎn)葡萄酒最多的10個產(chǎn)地的 占比

kwords = dict(fontsize=15, figsize=(10, 6), color=['r', 'g', 'b', 'y', 'c', 'm', 'k', 'pink', 'gray', 'orange'])
(df['province'].value_counts().head(10) / len(df)).plot.bar(**kwords)

展示每個評分的葡萄酒種類(個數(shù))

kwords = dict(fontsize=15, figsize=(10, 6), color=['r', 'g', 'b', 'y', 'c', 'm', 'k', 'pink', 'gray', 'orange'])
df['points'].value_counts().sort_index().plot.bar(**kwords) # 柱狀圖
df['points'].value_counts().sort_index().plot.area(**kwords) # 面積圖
df['points'].value_counts().sort_index().plot.line(**kwords) # 折線圖

Seaborn 繪圖

底層依賴 Matplotlib

pip install seaborn

已知數(shù)據(jù)

柱狀圖

按照性別,進行統(tǒng)計

  • x 是繪制的列名
  • hue 是分組的名字
import seaborn as sns
# 聯(lián)網(wǎng)加載數(shù)據(jù)集
df = sns.load_dataset('tips')
# 按照性別字段進行統(tǒng)計
sns.countplot(data=df, x='sex')
sns.countplot(data=df, x='day', hue='sex')

繪制直方圖

import seaborn as sns
# 聯(lián)網(wǎng)加載數(shù)據(jù)集
df = sns.load_dataset('tips')
sns.histplot(data=df, x='total_bill', hue='sex')

如何修改畫布大小和標(biāo)題

import seaborn as sns
import matplotlib.pyplot as plt
# 設(shè)置亂碼
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False

fig, ax = plt.subplots(figsize=(10, 6))
sns.histplot(data=df, x='total_bill', hue='sex')
ax.set_title('男女總賬單分布情況', fontsize=20)
plt.show()

案例

需求:描述總賬單金額和小費的分布情況(散點圖,關(guān)系圖)

import seaborn as sns
import matplotlib.pyplot as plt

plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False

fig, ax = plt.subplots(figsize=(10, 6))
# x軸??傎~單,y軸,消費,按照性別分組
sns.scatterplot(data=df, x='total_bill', y='tip', hue='sex')
ax.set_title('總賬單金額和小費的關(guān)系圖', fontsize=20)
plt.show()

還有其他方式繪制出,散點圖,它不能使用分組

# 擬合回歸線
sns.regplot(data=df, x='total_bill', y='tip')

還有一種方式,帶上直方圖的散點圖,注意它不需要和上面代碼混合在一起,它自帶畫布等

import seaborn as sns
import matplotlib.pyplot as plt

sns.jointplot(data=df, x='total_bill', y='tip')
plt.show()

它如果加上,分組,會使用折線圖,而不是直方圖

sns.jointplot(data=df, x='total_bill', y='tip', hue='sex')
plt.show()

加上 kind = red,使用正態(tài)分布,它不允許與 hue 分組一起使用

sns.jointplot(data=df, x='total_bill', y='tip', kind='reg')
plt.show()

還可以變成,蜂巢圖

sns.jointplot(data=df, x='total_bill', y='tip', kind='hex')
plt.show()

箱線圖 / 何須圖

  • Q3:四分之三
  • 中位數(shù):二分之一
  • q1:四分之一
import seaborn as sns
import matplotlib.pyplot as plt
# 聯(lián)網(wǎng)加載數(shù)據(jù)集
df = sns.load_dataset('tips')
# 線箱圖
sns.boxplot(data=df, x='time', y='total_bill')
plt.show()

小提琴圖

import seaborn as sns
import matplotlib.pyplot as plt
# 聯(lián)網(wǎng)加載數(shù)據(jù)集
df = sns.load_dataset('tips')
sns.violinplot(data=df, x='time', y='total_bill')
plt.show()

希望分組,使用 hue

sns.violinplot(data=df, x='time', y='total_bill', hue='sex')

希望切割,使用 split

sns.violinplot(data=df, x='time', y='total_bill', hue='sex', split=True)

以上就是Matplotlib可視化之使用pandas和Seaborn繪制精美圖表詳解的詳細內(nèi)容,更多關(guān)于Matplotlib可視化繪圖的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • Python3生成手寫體數(shù)字方法

    Python3生成手寫體數(shù)字方法

    本篇文章給大家分享習(xí)如何Python3生成手寫體數(shù)字方法以及實例代碼分享,有興趣的朋友參考下吧。
    2018-01-01
  • Python實現(xiàn)手寫一個類似django的web框架示例

    Python實現(xiàn)手寫一個類似django的web框架示例

    這篇文章主要介紹了Python實現(xiàn)手寫一個類似django的web框架,結(jié)合具體實例形式分析了Python自定義簡單控制器、URL路由、視圖模型等功能,實現(xiàn)類似Django框架的web應(yīng)用相關(guān)操作技巧,需要的朋友可以參考下
    2018-07-07
  • Python繪圖庫Pyecharts可視化效果示例詳解

    Python繪圖庫Pyecharts可視化效果示例詳解

    本文將帶您從零開始,逐步掌握使用Pyecharts庫進行數(shù)據(jù)可視化的技能,Pyecharts是一個基于Echarts的Python可視化庫,能夠輕松創(chuàng)建各種交互式圖表和地圖,無論您是數(shù)據(jù)分析新手還是有經(jīng)驗的開發(fā)者,都能幫助您深入了解Pyecharts的使用
    2023-08-08
  • Python turtle繪畫象棋棋盤

    Python turtle繪畫象棋棋盤

    這篇文章主要為大家詳細介紹了Python turtle繪畫象棋棋盤,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-08-08
  • 最新評論

    闸北区| 句容市| 霍林郭勒市| 大宁县| 读书| 广南县| 英德市| 萍乡市| 宁国市| 桦甸市| 临夏市| 万安县| 林口县| 西充县| 泊头市| 神农架林区| 宜阳县| 江阴市| 丁青县| 和林格尔县| 毕节市| 安康市| 新昌县| 蒲江县| 黄平县| 吉木萨尔县| 田林县| 乌鲁木齐市| 安仁县| 蒲城县| 奎屯市| 黄大仙区| 无棣县| 安宁市| 区。| 禄劝| 宿松县| 吉首市| 正安县| 叙永县| 新津县|