多样化数据可视化方法的全面示例:基于Python的多样化数据可视化

news2024/11/15 8:30:00

文章目录

  • 前言
  • 代码
  • 效果展示


前言

本文演示了使用Python进行温度数据的多样化可视化方法。通过导入、处理和分析气象数据,我们生成了多种图表,包括直方图、核密度估计图、箱型图、小提琴图、条形图、山脊图、经验累积分布函数图和折线图。这些图表帮助我们更直观地理解温度数据的分布和变化趋势。我们利用了Seaborn、Matplotlib和Plotly等数据可视化库,以美观和易于理解的方式展示数据。

代码

# Import necessary libraries
import pandas as pd
from pandas.api.types import CategoricalDtype
import seaborn as sns
import matplotlib.pyplot as plt
import plotly.express as px
from joypy import joyplot

# 导入数据
df = pd.read_csv('D:/Pythonmatlab/2326060760python数据分布/weatherData.csv')

# 设置季节为分类数据类型
season = CategoricalDtype(['Winter', 'Spring', 'Summer', 'Fall'])
df['Season'] = df['Season'].astype(season)

# 打印前5行数据
print(df.head(5))

#%%
# 直方图

# 设置图表大小
plt.figure(figsize=(10, 6))

# 生成直方图
sns.histplot(df, x='Temp')

# 显示图表
plt.show()

#%%
# 分地点的堆叠直方图

# 设置图表大小
plt.figure(figsize=(10, 6))

# 生成堆叠直方图
sns.histplot(df, x='Temp', hue='Location', multiple='stack')

# 设置标签
plt.title('Distribution of All Observed Temperatures', fontsize=25, y=1.03)
plt.xlabel('Temperature (F)', fontsize=13)
plt.ylabel('Count', fontsize=13)

# 显示图表
plt.show()

#%%
# 分季节的直方图

# 生成分季节的直方图
g = sns.displot(df, x='Temp', col='Season', hue='Location', 
                multiple='stack', binwidth=5, height=3, col_wrap=2, 
                facet_kws=dict(margin_titles=False))

# 设置轴标签
g.set_axis_labels('Temperature (F)', 'Count')

# 显示图表
plt.show()

#%%
# 分季节的垂直直方图

# 生成分季节的垂直直方图
g = sns.displot(df, x='Temp', col='Season', hue='Location',
                multiple='stack', binwidth=5, height=1, aspect=6,
                col_wrap=1, facet_kws=dict(margin_titles=True))

# 设置轴标签
g.set_axis_labels('Temperature (F)', 'Count', fontsize=17)

# 显示图表
plt.show()

#%%
# Plotly直方图

# 设置图表大小
plt.figure(figsize=(10, 6))

# 生成Plotly直方图
plot = px.histogram(df, x='Temp',
                    barmode='overlay', color='Location', facet_row='Season')

# 设置标题和标签
plot.update_layout(title={'text': "Distributions of Temperature\
                                  <br><sup>Sorted by Season and \
                                  Location</sup>",
                          'xanchor': 'left',
                          'yanchor': 'top',
                          'x': 0.1}, legend_title_text='Location',
                   xaxis_title='Recorded Temperature (F)')
plot.for_each_annotation(lambda x: x.update(text=x.text.split("=")[1]))
plot.update_yaxes(title='Count')

# 设置颜色和背景
plot.update_layout(plot_bgcolor='white')
plot.update_xaxes(showline=True, linecolor='gray')
plot.update_yaxes(showline=True, linecolor='gray')

# 显示图表
plot.show()

#%%
# 核密度估计图(KDE Plots)

# 设置图表大小
plt.figure(figsize=(10, 6))

# 生成KDE图
sns.kdeplot(data=df, x='Temp', hue='Location', fill=False)

# 设置标签
plt.title('KDE Plot of Temperatures', fontsize=25, y=1.03)
plt.xlabel('Temperature (F)', fontsize=13)
plt.ylabel('Density', fontsize=13)

# 显示图表
plt.show()

#%%
# 分季节的KDE图

# 生成分季节的KDE图
g = sns.displot(df, x="Temp", col="Season", hue='Location',
                kind='kde', height=1, aspect=7, col_wrap=1,
                fill=True, facet_kws=dict(margin_titles=True))

# 设置轴标签
g.set_axis_labels('Temperature (F)', 'Density', fontsize=16)

# 显示图表
plt.show()

#%%
# 分季节的带填充KDE图

# 生成分季节的带填充KDE图
g = sns.displot(df, x="Temp", col="Season", hue='Location', 
                kde=True, height=1, aspect=7, col_wrap=1, 
                fill=True, facet_kws=dict(margin_titles=True))

# 设置轴标签
g.set_axis_labels('Temperature (F)', 'Density', fontsize=16)

# 显示图表
plt.show()

#%%
# 山脊图(Joy Plots or Ridge Plots)

# 重塑数据
dfJoy = df.pivot(index=['Entry', 'Season'], columns='Location', values='Temp')
print(dfJoy.head())

# 生成山脊图
fig, axes = joyplot(data=dfJoy,
                    by='Season',
                    column=['City A', 'City B', 'City C'],
                    color=['#43bf60', '#2b7acf', '#f59f0a'],
                    alpha=.67,
                    legend=True,
                    overlap=2,
                    linewidth=.5,
                    figsize=(10, 6))

# 设置标签
plt.xlabel('Temperature (F)', fontsize=13)

# 显示图表
plt.show()

#%%
# 箱型图(Box Plots)

# 生成箱型图
plot = px.box(df, x='Season', color='Location', y='Temp', 
              color_discrete_sequence=px.colors.cyclical.IceFire)

# 更新布局和标题
plot.update_layout(title={'text': "Seasonal Temperature Distributions\
                                  <br><sup>By Season for Cities A, B, \
                                  and C</sup>",
                          'xanchor': 'left',
                          'yanchor': 'top',
                          'x': 0.1}, legend_title_text='Location:',
                   xaxis_title='',
                   yaxis_title='Temperature (F)')

# 更新样式
plot.update_layout(plot_bgcolor='white')
plot.update_xaxes(showline=True, linecolor='gray')
plot.update_yaxes(showline=True, linecolor='gray')

# 显示图表
plot.show()

#%%
# 小提琴图(Violin Plots)

# 设置图表大小
plt.figure(figsize=(10, 6))

# 生成小提琴图
sns.violinplot(data=df, x='Temp', y='Season', hue='Location',
               inner='quartile', palette='Set2')

# 设置标签
plt.title('Violin Plot of Observed Temperatures', fontsize=25, y=1.01)
plt.xlabel('Temperature (F)', fontsize=13)

# 显示图表
plt.show()

#%%
# 分类数据散点图(Strip and Swarm Plots)

# 设置图表大小
plt.figure(figsize=(10, 6))

# 生成strip plot
sns.stripplot(data=df, x='Temp', y='Season', hue='Location', jitter=True, 
              palette="magma", alpha=.75)

# 设置标签
plt.title('Strip Plot of Observed Temperatures', fontsize=25, y=1.01)
plt.xlabel('Temperature (F)', fontsize=13)

# 显示图表
plt.show()

#%%
# 设置图表大小
plt.figure(figsize=(10, 6))

# 生成strip plot(带dodge选项)
sns.stripplot(data=df, x='Temp', y='Season', hue='Location', jitter=True, 
              palette="magma", dodge=True, alpha=.5)

# 设置标签
plt.title('Strip Plot of Observed Temperatures', fontsize=25, y=1.01)
plt.xlabel('Temperature (F)', fontsize=13)

# 显示图表
plt.show()

#%%
# 设置图表大小
plt.figure(figsize=(10, 6))

# 生成swarm plot
sns.swarmplot(data=df, x='Temp', y='Season', hue='Location', 
              palette='magma')

# 设置标签
plt.title('Swarm Plot of Observed Temperatures', fontsize=25, y=1.01)
plt.xlabel('Temperature (F)', fontsize=13)

# 显示图表
plt.show()

#%%
# 设置图表大小
plt.figure(figsize=(10, 6))

# 生成swarm plot(带dodge选项)
sns.swarmplot(data=df, x='Temp', y='Season', hue='Location', 
              palette='magma', dodge=True)

# 设置标签
plt.title('Swarm Plot of Observed Temperatures', fontsize=25, y=1.01)
plt.xlabel('Temperature (F)', fontsize=13)

# 显示图表
plt.show()

#%%
# 经验累积分布函数图(ECDF Plots)

# 生成ECDF图
sns.displot(df, x='Temp', hue='Location', kind='ecdf', height=5)

# 设置标签
plt.xlabel('Temperature (F)', fontsize=13)

# 显示图表
plt.show()

#%%
# 分季节的ECDF图

# 生成分季节的ECDF图
g = sns.displot(df, x='Temp', hue='Location', col='Season', kind='ecdf', height=4)

# 设置轴标签
g.set_axis_labels('Temperature (F)', 'Cumulative Distribution')

# 显示图表
plt.show()

#%%
# 折线图(Line Plots)

# 设置图表大小
plt.figure(figsize=(10, 6))

# 生成折线图
sns.lineplot(data=df, x='Entry', y='Temp', hue='Location', 
             ci=None, palette='tab10')

# 设置标签
plt.title('Temperature Trends Over Time', fontsize=25, y=1.01)
plt.xlabel('Entry', fontsize=13)
plt.ylabel('Temperature (F)', fontsize=13)

# 显示图表
plt.show()

#%%
# 分季节的折线图

# 生成分季节的折线图
g = sns.relplot(data=df, x='Entry', y='Temp', hue='Location', kind='line', 
                col='Season', col_wrap=1, height=4, aspect=5, facet_kws=dict(margin_titles=True))

# 设置轴标签
g.set_axis_labels('Entry', 'Temperature (F)', fontsize=16)

# 显示图表
plt.show()

#%%
# 分地点的折线图

# 生成分地点的折线图
g = sns.relplot(data=df, x='Entry', y='Temp', hue='Season', kind='line',
                col='Location', col_wrap=1, height=4, aspect=5, facet_kws=dict(margin_titles=True))

# 设置轴标签
g.set_axis_labels('Entry', 'Temperature (F)', fontsize=16)

# 显示图表
plt.show()

# Create Displot:
g = sns.displot(df, x='Temp', col='Season', hue='Location',
                kind='ecdf', height=3, col_wrap=2,
                facet_kws=dict(margin_titles=True))

# Set labels:
# g.fig.suptitle('Distributions of Temperature by Season',
#                fontsize=25, x=0.47, y=1.03, ha='center')
g.set_axis_labels('Temperature (F)', 'Count')
plt.show()
#%%

df = sns.load_dataset('iris')

# Plot
plt.figure(figsize=(10, 8), dpi=80)
sns.pairplot(df,
             kind="scatter",
             hue="species",
             palette='Set1',
             plot_kws=dict(s=80, edgecolor="white", linewidth=2.5))
plt.show()


#%%
df = sns.load_dataset('iris')

# Plot

sns.pairplot(df)
plt.show()
# 导入鸢尾花数据集
df = sns.load_dataset('iris')

# 绘制配对图
plt.figure(figsize=(10, 8), dpi=80)
sns.pairplot(df,
             kind="scatter",
             hue="species",
             palette='Set1',
             plot_kws=dict(s=80, edgecolor="white", linewidth=2.5))
plt.show()

#%%
# 再次导入鸢尾花数据集
df = sns.load_dataset('iris')

# 绘制简单的配对图
sns.pairplot(df)
plt.show()

效果展示

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1926938.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

国内体外诊断行业翘楚『迈克生物』SRM项目启动,企企通赋能IVD产业打造高效采购供应链体系

IVD行业&#xff08;体外诊断行业&#xff09;在医疗领域被誉为“医生的眼睛”&#xff0c;是现代检验医学的重要构成部分&#xff0c;在临床应用中贯穿了疾病预防、初步诊断、治疗方案选择、疗效评价等疾病治疗的全过程&#xff0c;在现代医学疾病诊断中发挥着重要作用。 随着…

springboot1——快速构建项目

需求 第一步&#xff1a;创建maven工程(非web项目) 第二步&#xff1a;导入起步依赖 点击&#xff1a; 下拉复制&#xff1a; 粘贴&#xff1a;&#xff01;&#xff01;这是springboot工程需要继承的父工程 下拉复制&#xff1a; 粘贴&#xff1a;&#xff01;&#xf…

JAVA:常用的链表指南

请关注微信公众号&#xff1a;拾荒的小海螺 博客地址&#xff1a;http://lsk-ww.cn/ 1、简述 链表是一种常见的数据结构&#xff0c;它通过一系列节点&#xff08;Node&#xff09;来表示一个序列。每个节点包含数据和指向下一个节点的引用。链表的种类有很多&#xff0c;包括…

网络文件系统—NFS

目录 一、概述 二、NFS挂载原理 三、NFS相关协议及软件安装管理 1.协议&#xff1a; 2.软件&#xff1a; 四、NFS系统守护进程 五、NFS服务器的配置 六、NFS服务器的启动与停止 1. 启动NFS服务器 2.查询NFS服务器状态 3.停止NFS服务器 4.设置NFS服务器的自动启动状…

games103作业2(未完)

PBD方法 首先是每个质点的力的分析&#xff0c;不考虑碰撞和弹簧弹力的情况下&#xff0c;每个质点受重力的影响&#xff0c;所以需要对每个质点进行速度和位置的重力影响更新。 float t 0.0333f; float damping 0.99f; int[] E; float[] L; Vector3[] V; Vector3 gra…

【数学建模】——数学规划模型

目录 一、线性规划&#xff08;Linear Programming&#xff09; 1.1 线性规划的基本概念 1.2 线性规划的图解法 模型建立&#xff1a; 二、整数规划&#xff08;Integer Programming&#xff09; 2.1 整数规划的基本概念 2.2 整数规划的求解方法 三、非线性规划&#x…

<数据集>绝缘子缺陷检测数据集<目标检测>

数据集格式&#xff1a;VOCYOLO格式 图片数量&#xff1a;2139张 标注数量(xml文件个数)&#xff1a;2139 标注数量(txt文件个数)&#xff1a;2139 标注类别数&#xff1a;8 标注类别名称&#xff1a;[insulator, broken disc, pollution-flashover, Two glass, Glassdirt…

220V降压5ⅤIC-AH8652

220V降压至5V的IC - AH8652 在电子设计中&#xff0c;电压转换是一个常见的需求&#xff0c;尤其是在需要将高电压转换为低电压以供电给微电子设备时。AH8652是一款专为降压转换设计的集成电路&#xff0c;它能够将220V的交流输入电压转换为稳定的5V直流输出&#xff0c;非常适…

Camunda如何通过外部任务与其他系统自动交互

文章目录 简介流程图外部系统pom.xmllogback.xml监听类 启动流程实例常见问题Public Key Retrieval is not allowed的解决方法java.lang.reflect.InaccessibleObjectException 流程图xml 简介 前面我们已经介绍了Camunda的基本操作、任务、表&#xff1a; Camunda组件与服务与…

spring6之容器:IOC

容器&#xff1a;IOC 控制反转&#xff08;Ioc&#xff09; IoC容器在Spring的实现 Spring 的 IoC 容器就是 IoC思想的一个落地的产品实现。IoC容器中管理的组件也叫做 bean。在创建 bean 之前&#xff0c;首先需要创建IoC 容器。Spring 提供了IoC 容器的两种实现方式&#xf…

华为HCIP Datacom H12-821 卷39

1.填空题 请2001 :0DB8:0000:C030:0000: 000: 09A0:CDEF地址进行压缩。() (若答案中存在字母&#xff0c;请采用大写格式) 参考答案&#xff1a;2001 :DB8:0:C030: :9A0:CDEF 解析&#xff1a; IPv6地址的表示方法 IPv6地址总长度为128比特&#xff0c;通常分为8组&#xff0c…

防御综合实验作业2

办公区设备可以通过电信链路和移动链路上网(多对多的NAT&#xff0c;并且需要保留一个公网IP NAT策略&#xff1a; 安全策略&#xff1a; 测试&#xff1a; 分公司设备可以通过总公司的移动链路和电信链路访问到Dmz区的http服务器 是怎么转换的&#xff0c;首先分公司的用户需…

温度如何影响输入失调电压

目录 一、概念理解 二、仿真理解 一、概念理解 在手册中有这样一个参数&#xff1a;输入失调电压漂移&#xff08;input offset voltage drift / offset drift&#xff09; 以上图为例&#xff0c;这个参数理解为&#xff1a;常温下&#xff08;25℃&#xff09;每增减1摄氏度…

【STM32开发笔记】搭建VSCode+PyOCD的STM32开发环境

【STM32开发笔记】搭建VSCodePyOCD的STM32开发环境 一、安装软件1.1 安装STM32CubeMX1.2 安装VSCode1.3 安装Arm GNU Toolchain1.4 安装Make for Windows1.5 安装Python1.6 安装PyOCD 二、安装插件2.1 VSCode插件2.2 PyOCD支持包 三、创建项目3.1 创建STM32CubeMX项目3.2 查阅原…

PostgreSQL 中如何处理数据的并发读写和锁等待超时?

&#x1f345;关注博主&#x1f397;️ 带你畅游技术世界&#xff0c;不错过每一次成长机会&#xff01;&#x1f4da;领书&#xff1a;PostgreSQL 入门到精通.pdf 文章目录 PostgreSQL 中如何处理数据的并发读写和锁等待超时一、并发读写的基本概念&#xff08;一&#xff09;…

org/openxmlformats/schemas/spreadsheetml/x2006/main/CTWorkbook$Factory

org/openxmlformats/schemas/spreadsheetml/x2006/main/CTWorkbook$Factory POI的问题 在操作Excel时&#xff0c;出现这个问题是因为缺少了poi-ooxml-schema jar包&#xff0c;并且与poi的jar包版本一致

html02-标签继续学习

1.列表标签 1.1 列表标签的使用场景 场景&#xff1a;在网页中按照 行 展示关联性的内容&#xff0c;如&#xff1a;新闻列表、排行榜、账单等 特点&#xff1a;按照行的方式&#xff0c;整齐显示内容 种类&#xff1a;无序列表、有序列表、自定义列表 1.2无序列表 <!--…

LPRNet 车牌识别部署 rk3588(pt-onnx-rknn)包含各个步骤完整代码

虽然车牌识别技术很成熟了&#xff0c;但完全没有接触过。一直想搞一下、整一下、试一下、折腾一下&#xff0c;工作之余找了一个简单的例子入个门。本博客简单记录一下 LPRNet 车牌识别部署 rk3588流程&#xff0c;训练参考 LPRNet 官方代码。 1、导出onnx   导出onnx很容易…

短剧营销:品牌传播的新风口?

7月10日&#xff0c;麦当劳首部短剧《重生之我在麦当劳修炼魔法》&#xff0c;在微信视频号、小红书、抖音等平台上线。这部短剧以「短剧脱口秀」 的模式&#xff0c;将麦当劳的品牌形象与「土味霸总」 的网络热点相结合&#xff0c;上线一小时内&#xff0c;全平台播放量破千。…

Flutter实现局部刷新的几种方式

目录 前言 1.局部刷新的重要性 1.概念 2.重要性 2.局部刷新实现的几种方式 1.使用setState方法进行局部刷新 2.使用StatefulWidget和InheritedWidget局部刷新UI 3.ValueNotifier和ValueListenableBuilder 4.StreamBuilder 5.Provider 6.GetX 7.使用GlobalKey 前言 …