Python matplotlib seaborn(学习笔记)(上)

简介: Seaborn是在matplotlib的基础上进行了更高级的API封装,从而使得作图更加容易,在大多数情况下使用seaborn就能做出很具有吸引力的图。

一、seaborn概述



Seaborn是在matplotlib的基础上进行了更高级的API封装,从而使得作图更加容易,在大多数情况下使用seaborn就能做出很具有吸引力的图。详情请查阅官网:seaborn


二、数据整理



import seaborn as sns
import numpy as np 
import matplotlib as mpl
from matplotlib import pyplot as plt 
import pandas as pd 
from datetime import datetime,timedelta
%matplotlib inline
plt.rcParams['font.sans-serif']=['SimHei'] # 用来正常显示中文标签
plt.rcParams['axes.unicode_minus']=False # 用来正常显示负号
from datetime import datetime 
films=['穿过寒冬拥抱你','反贪风暴5:最终章','李茂扮太子','误杀2','以年为单位的恋爱','黑客帝国:矩阵重启','雄狮少年','魔法满屋','汪汪队立大功大电影','爱情神话']
regions=['中国','英国','澳大利亚','美国','美国','中国','英国','澳大利亚','美国','美国']
bos=['61,181','44,303','42,439','22,984','13,979','61,181','44,303','41,439','20,984','19,979']
persons=['31','23','56','17','9','31','23','56','17','9']
prices=['51','43','56','57','49','51','43','56','57','49']
showdate=['2022-12-03','2022-12-05','2022-12-01','2022-12-02','2022-11-05','2022-12-03','2022-12-05','2022-12-01','2022-12-02','2022-11-05']
ftypes=['剧情','动作','喜剧','剧情','剧情','爱情','动作','动画','动画','动画']
points=['8.1','9.0','7.9','6.7','3.8','8.1','9.0','7.9','6.7','3.8']
filmdescript={
    'ftypes':ftypes,
    'bos':bos,
    'prices':prices,
    'persons':persons,
    'regions':regions,
    'showdate':showdate,
    'points':points
}
import numpy as np
import pandas as pd
cnbo2021top5=pd.DataFrame(filmdescript,index=films)
cnbo2021top5[['prices','persons']]=cnbo2021top5[['prices','persons']].astype(int)
cnbo2021top5['bos']=cnbo2021top5['bos'].str.replace(',','').astype(int)
cnbo2021top5['showdate']=cnbo2021top5['showdate'].astype('datetime64')
cnbo2021top5['points']=cnbo2021top5['points'].apply(lambda x:float(x) if x!='' else 0)
cnbo2021top5
e88a39d28ed04356914a06f89442b0c3.png
# 常用调色盘
r_hex = '#dc2624'     # red,       RGB = 220,38,36  
dt_hex = '#2b4750'    # dark teal, RGB = 43,71,80 
tl_hex = '#45a0a2'    # teal,      RGB = 69,160,162 
r1_hex = '#e87a59'    # red,       RGB = 232,122,89 
tl1_hex = '#7dcaa9'   # teal,      RGB = 125,202,169  
g_hex = '#649E7D'     # green,     RGB = 100,158,125  
o_hex = '#dc8018'     # orange,    RGB = 220,128,24 
tn_hex = '#C89F91'    # tan,       RGB = 200,159,145  
g50_hex = '#6c6d6c'   # grey-50,   RGB = 108,109,108  
bg_hex = '#4f6268'    # blue grey, RGB = 79,98,104  
g25_hex = '#c7cccf'   # grey-25,   RGB = 199,204,207
color=['#dc2624' ,'#2b4750','#45a0a2','#e87a59','#7dcaa9','#649E7D','#dc8018','#C89F91','#6c6d6c','#4f6268','#c7cccf']
sns.set_palette(color)


01 折线图


def sinplot(flip=1):
    x = np.linspace(0, 14, 100)
    for i in range(1, 7):
        plt.plot(x, np.sin(x + i * .5) * (7 - i) * flip)
sinplot()
# 对两种画图进行比较
fig = plt.figure()
sns.set()
sinplot()

d7e3e8e1989c41a49491e7bd3ff38ac7.png

plt.rcParams['font.sans-serif']=['SimHei'] # 用来正常显示中文标签
plt.rcParams['axes.unicode_minus']=False # 用来正常显示负号
plt.figure(figsize=(14,8))
plt.title("中国电影票房2021top10")
plt.xlabel("电影名称")
plt.ylabel("电影票房")
sns.lineplot(data=cnbo2021top5[['bos']])
plt.xticks(rotation=45)

fc990b9dddbd4799a0641672ab1664f7.png

02 柱形图


cnbo2021top5ftgb=cnbo2021top5.groupby(['ftypes'])['bos','persons','prices','points'].mean()
cnbo2021top5ftgb=cnbo2021top5ftgb.reset_index().replace()
cnbo2021top5ftgb
671357844fe149d490169a481c06351c.png
### 02 条形图
plt.figure(figsize=(14,8))
plt.title("中国电影票房2021top10")
sns.barplot(x=cnbo2021top5ftgb['ftypes'],y=cnbo2021top5ftgb['persons'])
plt.xlabel("电影类型")
plt.ylabel("场均人次")
plt.xticks(rotation=45)
plt.show()
0decb6ef37f843b3b187ad8b572fadf8.png

03 直方图


### 03 直方图
plt.figure(figsize=(14,8))
plt.title("中国电影票房2021top10")
sns.histplot(x=cnbo2021top5['bos'],bins=15) # x=cnbo2021top5ftgb['ftypes'],y=cnbo2021top5ftgb['persons']
plt.xlabel("电影类型")
plt.ylabel("场均人次")
plt.xticks(rotation=45)
plt.show()

5c83c859f7784ec9b5320d0e24bbc018.png

三、绘图



上面的数据只有十部电影,而下面的数据是我整理出来的电影数据:

Excel:300部电影数据整理

import pandas as pd 
cnboo=pd.read_excel("cnboNPPD1.xlsx")
cnboo

73d60c09be234e599b0ca670ee1530bf.png


01 设定调色盘


c272e0758a6d4dd8a73e7cabc6164997.png


02 柱状图

sns.set_palette(color)
sns.palplot(sns.color_palette(color,11))
plt.figure(figsize=(25,20))
plt.title('电影票房')
plt.xticks(rotation=45)
sns.barplot(x='TYPE',
            y='PRICE',
            hue='TYPE',
            data=cnboo)

ba463f7ae81747c08b4ad7f48d014c1e.png


03 技术图


sns.set_palette(color)
sns.palplot(sns.color_palette(color,11))
plt.figure(figsize=(15,10))
plt.title('电影票房')
plt.xticks(rotation=45)
sns.countplot(x='TYPE',data=cnboo)
0e4889470c1e447fa93de8d3da96c562.png

04 点图


sns.set_palette(color)
sns.palplot(sns.color_palette(color,11))
plt.figure(figsize=(15,10))
plt.title('电影票房')
plt.xticks(rotation=45)
sns.pointplot(x='TYPE',y='PRICE',data=cnboo)
plt.show()

1926b3f164c640c8a8d9926e0783471d.png

sns.set_palette(color)
sns.palplot(sns.color_palette(color,11))
plt.figure(figsize=(25,10))
plt.title('电影票房')
plt.xticks(rotation=45)
sns.pointplot(x='TYPE',y='PRICE',hue='REGION',data=cnboo)
plt.show()

c6363839b26244928e07c15e0042d547.png


05 箱型图


### 05 箱型图
sns.set_palette(color)
sns.palplot(sns.color_palette(color,11))
plt.figure(figsize=(35,10))
plt.title('电影票房')
plt.xticks(rotation=45)
sns.boxplot(x='TYPE',y='PERSONS',hue='REGION',data=cnboo) # ,markers=['^','o'],linestyles=['-','--']
plt.show()
# 图中的单个点代表在此数据当中的异常值

dd93d4ee06654e6fa9561859bc61ad39.png

06 小提琴图


### 06 小提琴图
sns.set_palette(color)
sns.palplot(sns.color_palette(color,11))
plt.figure(figsize=(35,10))
plt.title('电影票房')
plt.xticks(rotation=45)
sns.violinplot(x='TYPE',y='PRICE',hue='REGION',data=cnboo) # ,markers=['^','o'],linestyles=['-','--']
plt.show()

c7cf6c0bfd7e40f98a3aef523e86b7db.png

绘制横着的小提琴图:

sns.set_palette(color)
sns.palplot(sns.color_palette(color,11))
plt.figure(figsize=(35,10))
plt.title('电影票房')
plt.xticks(rotation=45)
sns.violinplot(x='PERSONS',y='PRICE',hue='REGION',data=cnboo,orient='h')
plt.show()

09b331c1514d43288137c00caca80caa.png

07 双变量分布图


sns.set_palette(color)
plt.figure(figsize=(15,7))
# plt.xticks(rotation=45)
sns.jointplot(x='BO',y='PRICE',data=cnboo).fig.suptitle("电影票房与票价的双变量分布图",va='top',y=1.05)
plt.show()

376fea043a444f719a56bde4d4fb2f35.png

sns.set_palette(color)
plt.figure(figsize=(15,7))
# plt.xticks(rotation=45)
snsfig=sns.jointplot(x='PERSONS',y='BO',data=cnboo,color='g',s=50,edgecolor='black',linewidth=1,alpha=0.7,space=0.1,kind='scatter',height=6,ratio=5,marginal_kws=dict(bins=10,rug=True))
snsfig.fig.suptitle("电影场均人次与票价的双变量分布图",va='top',y=1.05)
plt.show()

d0419f1516cd4b3d9c26eab59d9ef417.png

sns.set_palette(color)
plt.figure(figsize=(15,7))
# plt.xticks(rotation=45)
snsfig=sns.jointplot(x='PERSONS',y='BO',
                     data=cnboo,color='g',
                     edgecolor='black',linewidth=1,alpha=0.7,
                     space=0.1,kind='hex',height=6,joint_kws=dict(gridsize=20), # gridsize越小,网格越大
                     ratio=5,marginal_kws=dict(bins=10,rug=True)) #bins=10:表示分成10个柱 
snsfig.fig.suptitle("电影场均人次与票价的双变量分布图",va='top',y=1.05)
plt.show()

137b2569da0d4eefa44a52ca71c03cc3.pngbaaebbb0562e42bfa04cd2808667bbf3.png

sns.set_palette(color)
plt.figure(figsize=(15,7))
snsfig=sns.jointplot(x='PERSONS',y='BO',
                     data=cnboo,color='g',
                     edgecolor='black',linewidth=1,alpha=0.7,
                     space=0.1,kind='hex',height=6,joint_kws=dict(gridsize=40), # gridsize越小,网格越大
                     ratio=5,marginal_kws=dict(bins=10,rug=True,color='r',hist_kws={'edgecolor':'b'})) #bins=10:表示分成10个柱 ,且这里的color控制柱形图的颜色
snsfig.fig.suptitle("电影场均人次与票价的双变量分布图",va='top',y=1.05)
plt.show()

f3db68cc4fb34222974dd7810eaaea65.png

sns.set_palette(color)
plt.figure(figsize=(15,7))
# plt.xticks(rotation=45)
snsfig=sns.jointplot(x='PERSONS',y='BO',
                     data=cnboo,color='g',
#                      edgecolor='black',linewidth=1,alpha=0.7,
                     space=0.1,kind='kde', joint_kws=dict(gridsize=40), # gridsize越小,网格越大
                     ratio=5,) #bins=10:表示分成10个柱 ,且这里的color控制柱形图的颜色
snsfig.fig.suptitle("电影场均人次与票价的双变量分布图",va='top',y=1.05)
plt.show()
38ed660148114230a2b012d4f7957921.png


相关文章
|
21天前
|
数据可视化 Python
Matplotlib 教程 之 Seaborn 教程 10
Seaborn 是基于 Matplotlib 的 Python 数据可视化库,专注于统计图形的绘制。它提供了高级接口和美观的默认主题,简化了复杂图形的生成过程。Seaborn 支持多种图表类型,如散点图、折线图、柱状图、热图等,并特别强调视觉效果。例如,使用 `sns.violinplot()` 可以轻松绘制展示数据分布的小提琴图。
30 1
|
8天前
|
数据可视化 JavaScript 前端开发
Python中交互式Matplotlib图表
【10月更文挑战第20天】Matplotlib 是 Python 中最常用的绘图库之一,但默认生成的图表是静态的。通过结合 mpld3 库,可以轻松创建交互式图表,提升数据可视化效果。本文介绍了如何使用 mpld3 在 Python 中创建交互式散点图、折线图和直方图,并提供了详细的代码示例和安装方法。通过添加插件,可以实现缩放、平移和鼠标悬停显示数据标签等交互功能。希望本文能帮助读者掌握这一强大工具。
27 5
|
29天前
|
网络协议 Java Linux
PyAV学习笔记(一):PyAV简介、安装、基础操作、python获取RTSP(海康)的各种时间戳(rtp、dts、pts)
本文介绍了PyAV库,它是FFmpeg的Python绑定,提供了底层库的全部功能和控制。文章详细讲解了PyAV的安装过程,包括在Windows、Linux和ARM平台上的安装步骤,以及安装中可能遇到的错误和解决方法。此外,还解释了时间戳的概念,包括RTP、NTP、PTS和DTS,并提供了Python代码示例,展示如何获取RTSP流中的各种时间戳。最后,文章还提供了一些附录,包括Python通过NTP同步获取时间的方法和使用PyAV访问网络视频流的技巧。
130 4
PyAV学习笔记(一):PyAV简介、安装、基础操作、python获取RTSP(海康)的各种时间戳(rtp、dts、pts)
|
30天前
|
Python
Socket学习笔记(二):python通过socket实现客户端到服务器端的图片传输
使用Python的socket库实现客户端到服务器端的图片传输,包括客户端和服务器端的代码实现,以及传输结果的展示。
119 3
Socket学习笔记(二):python通过socket实现客户端到服务器端的图片传输
|
12天前
|
数据采集 数据可视化 数据处理
如何使用Python实现一个交易策略。主要步骤包括:导入所需库(如`pandas`、`numpy`、`matplotlib`)
本文介绍了如何使用Python实现一个交易策略。主要步骤包括:导入所需库(如`pandas`、`numpy`、`matplotlib`),加载历史数据,计算均线和其他技术指标,实现交易逻辑,记录和可视化交易结果。示例代码展示了如何根据均线交叉和价格条件进行开仓、止损和止盈操作。实际应用时需注意数据质量、交易成本和风险管理。
32 5
|
30天前
|
JSON 数据格式 Python
Socket学习笔记(一):python通过socket实现客户端到服务器端的文件传输
本文介绍了如何使用Python的socket模块实现客户端到服务器端的文件传输,包括客户端发送文件信息和内容,服务器端接收并保存文件的完整过程。
119 1
Socket学习笔记(一):python通过socket实现客户端到服务器端的文件传输
|
20天前
|
数据可视化 数据挖掘 Python
Seaborn 库创建吸引人的统计图表
【10月更文挑战第11天】本文介绍了如何使用 Seaborn 库创建多种统计图表,包括散点图、箱线图、直方图、线性回归图、热力图等。通过具体示例和代码,展示了 Seaborn 在数据可视化中的强大功能和灵活性,帮助读者更好地理解和应用这一工具。
33 3
|
22天前
|
数据可视化 数据挖掘 Python
Matplotlib 教程 之 Seaborn 教程 8
Seaborn 是基于 Matplotlib 的 Python 数据可视化库,专注于统计图形的绘制。它提供了简洁的高级接口和美观的默认样式,支持多种图表类型,如散点图、折线图、柱状图、热图等,特别适合于数据分析和展示。例如,使用 `sns.boxplot()` 可以轻松绘制箱线图,展示数据的分布情况。
34 3
|
21天前
|
数据可视化 Python
Matplotlib 教程 之 Seaborn 教程 9
Seaborn 是基于 Matplotlib 的 Python 数据可视化库,专注于统计图形的绘制。它提供了高级接口和美观的默认主题,简化了复杂图形的生成过程。本文介绍了 Seaborn 的主要功能和绘图函数,包括热图 `sns.heatmap()` 的使用方法和示例代码。
16 1
|
25天前
|
数据可视化 Python
Matplotlib 教程 之 Seaborn 教程 2
Seaborn 是基于 Matplotlib 的 Python 数据可视化库,专注于统计图形的绘制,提供高级接口和美观的默认主题,支持散点图、折线图等多种图表类型,安装简便,可通过 `pip install seaborn` 完成。Seaborn 设计注重美观与易用性,内置多种主题如 darkgrid、whitegrid 等,便于用户快速生成高质量的统计图表。
18 3
下一篇
无影云桌面