Seaborn 是一个建立在 Matplotlib 基础之上的 Python 数据可视化库,专注于绘制各种统计图形,以便更轻松地呈现和理解数据。
import seaborn as sns
# 设置主题和颜色调色板
sns.set_theme(style="whitegrid", palette="pastel")
sns.set_theme() 函数,可以选择不同的主题和模板,以下是 Seaborn 内置的一些主题和模板:
主题(Theme)
darkgrid(默认):深色网格主题。
import seaborn as sns
# 设置为 darkgrid 主题
sns.set_theme(style="darkgrid")
whitegrid:浅色网格主题。
import seaborn as sns
# 设置为 whitegrid 主题
sns.set_theme(style="whitegrid")
dark:深色主题,没有网格。
import seaborn as sns
# 设置为 dark 主题
sns.set_theme(style="dark")
white:浅色主题,没有网格。
import seaborn as sns
# 设置为 white 主题
sns.set_theme(style="white")
ticks:深色主题,带有刻度标记。
import seaborn as sns
# 设置为 ticks 主题
sns.set_theme(style="ticks")
模板(Context)
paper:适用于小图,具有较小的标签和线条。
import seaborn as sns
# 设置为 paper 模板
sns.set_theme(context="paper")
notebook(默认):适用于笔记本电脑和类似环境,具有中等大小的标签和线条。
import seaborn as sns
# 设置为 notebook 模板
sns.set_theme(context="notebook")
talk:适用于演讲幻灯片,具有大尺寸的标签和线条。
import seaborn as sns
# 设置为 talk 模板
sns.set_theme(context="talk")
poster:适用于海报,具有非常大的标签和线条。
sns.set_theme(context="poster")
实例
import seaborn as sns
import matplotlib.pyplot as plt
# 设置主题和颜色调色板
sns.set_theme(style="darkgrid", palette="pastel")
# 示例数据
products = ["Product A", "Product B", "Product C", "Product D"]
sales = [120, 210, 150, 180]
# 创建柱状图
sns.barplot(x=products, y=sales)
# 添加标签和标题
plt.xlabel("Products")
plt.ylabel("Sales")
plt.title("Product Sales by Category")
# 显示图表
plt.show()
结果如下图所示:
绘图函数
Seaborn 提供了多个绘图函数,用于创建各种统计图形,以下是 Seaborn 主要的几个绘图函数及相应的实例:
1. 散点图 - sns.scatterplot()
用于绘制两个变量之间的散点图,可选择添加趋势线。
实例
import seaborn as sns
import matplotlib.pyplot as plt
import pandas as pd
# 创建一个示例数据框
data = {'A': [1, 2, 3, 4, 5], 'B': [5, 4, 3, 2, 1]}
df = pd.DataFrame(data)
# 绘制散点图
sns.scatterplot(x='A', y='B', data=df)
plt.show()
结果如下图所示:
2. 折线图 - sns.lineplot()
用于绘制变量随着另一个变量变化的趋势线图。
实例
import seaborn as sns
import matplotlib.pyplot as plt
import pandas as pd
# 创建一个示例数据框
data = {'X': [1, 2, 3, 4, 5], 'Y': [5, 4, 3, 2, 1]}
df = pd.DataFrame(data)
# 绘制折线图
sns.lineplot(x='X', y='Y', data=df)
plt.show()
结果如下图所示:
3. 柱状图 - sns.barplot()
用于绘制变量的均值或其他聚合函数的柱状图。
实例
import seaborn as sns
import matplotlib.pyplot as plt
import pandas as pd
# 创建一个示例数据框
data = {'Category': ['A', 'B', 'C'], 'Value': [3, 7, 5]}
df = pd.DataFrame(data)
# 绘制柱状图
sns.barplot(x='Category', y='Value', data=df)
plt.show()
结果如下图所示:
4. 箱线图 - sns.boxplot()
用于绘制变量的分布情况,包括中位数、四分位数等。
实例
import seaborn as sns
import matplotlib.pyplot as plt
import pandas as pd
# 创建一个示例数据框
data = {'Category': ['A', 'A', 'B', 'B', 'C', 'C'], 'Value': [3, 7, 5, 9, 2, 6]}
df = pd.DataFrame(data)
# 绘制箱线图
sns.boxplot(x='Category', y='Value', data=df)
plt.show()
结果如下图所示:
5. 热图 - sns.heatmap()
用于绘制矩阵数据的热图,通常用于展示相关性矩阵。
实例
import seaborn as sns
import matplotlib.pyplot as plt
import pandas as pd
# 创建一个示例数据框
data = {'A': [1, 2, 3, 4, 5], 'B': [5, 4, 3, 2, 1]}
df = pd.DataFrame(data)
# 创建一个相关性矩阵
correlation_matrix = df.corr()
# 使用热图可视化相关性矩阵
sns.heatmap(correlation_matrix, annot=True, cmap='coolwarm', fmt=".2f")
plt.show()
结果如下图所示:
核电站
import numpy as np
import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt
df = pd.read_csv('nuclear.csv', delimiter=',')
countries_shortNames = [['UNITED STATES OF AMERICA', 'USA'], \
['RUSSIAN FEDERATION', 'RUSSIA'], \
['IRAN, ISLAMIC REPUBLIC OF', 'IRAN'], \
['KOREA, REPUBLIC OF', 'SOUTH KOREA'], \
['TAIWAN, CHINA', 'CHINA']]
for shortName in countries_shortNames:
df = df.replace(shortName[0], shortName[1])
import folium import matplotlib.cm as cm import matplotlib.colors as colors latitude, longitude = 40, 10.0 map_world_NPP = folium.Map(location=[latitude, longitude], zoom_start=2) viridis = cm.get_cmap('viridis', df['NumReactor'].max()) colors_array = viridis(np.arange(df['NumReactor'].min() - 1, df['NumReactor'].max())) rainbow = [colors.rgb2hex(i) for i in colors_array] for nReactor, lat, lng, borough, neighborhood in zip(df['NumReactor'].astype(int), df['Latitude'].astype(float), df['Longitude'].astype(float), df['Plant'], df['NumReactor']): label = '{}, {}'.format(neighborhood, borough) label = folium.Popup(label, parse_html=True) folium.CircleMarker( [lat, lng], radius=3, popup=label, color=rainbow[nReactor - 1], fill=True, fill_color=rainbow[nReactor - 1], fill_opacity=0.5).add_to(map_world_NPP) # 在地图上显示 map_world_NPP.save('world_map.html') # 保存为 HTML 文件 # 然后打开world_map.html 文件 可以看到