国一大佬也收藏的16个Python数据可视化案例(附源码)
数据可视化是数学建模比赛中关键的一步。
同学们在以数据可视化表现某些数据时可以尝试使用 Python 的第三方库。
不过有些同学可能会问也会遇到不少问题,比如选择何种图表,以及如何制作,代码如何编写,这些都是问题!
今天给大家介绍几种常见的 Python 数据可视化图表(第一期),总计约 16 个示例~
01. 小提琴图
小提琴图可以将一组或多组数据的数值变量分布可视化。
import seaborn as sns
import matplotlib.pyplot as plt# 加载数据
df = sns.load_dataset('iris', data_home='seaborn-data', cache=False)# 绘图显示
sns.violinplot(x=df["species"], y=df["sepal_length"])
plt.show()
02. 核密度估计图
核密度估计图是对直方图的一个拓展。
可以可视化一个或多个组的数值变量的分布,适合大型数据集。
import seaborn as sns
import matplotlib.pyplot as plt
# 加载数据
df = sns.load_dataset('iris', data_home='seaborn-data', cache=False)
# 绘图显示
sns.kdeplot(df['sepal_width'])
plt.show()
结果如下
03. 散点图
散点图,显示两个数值变量之间的关系。
import seaborn as sns
import matplotlib.pyplot as plt
# 加载数据
df = sns.load_dataset('iris', data_home='seaborn-data', cache=False)
# 绘图显示
sns.regplot(x=df["sepal_length"], y=df["sepal_width"])
plt.show()
结果如下
04. 矩形热力图
矩形热力图,矩阵中的每个值都被表示为一个颜色数据。
import seaborn as sns
import pandas as pd
import numpy as np# 加载数据
df=pd.DataFrame(np.random.random((5,5)),columns=["a","b","c","d","e"])
# Default heatmap
p1 = sns.heatmap(df)
结果如下
05. 相关性图
分析每对数据变量之间的关系
相关性可视化为散点图,对角线用直方图或密度图表示每个变量的分布。
import seaborn as sns
import matplotlib.pyplot as plt
# 加载数据
df = sns.load_dataset('iris', data_home='seaborn-data', cache=True)
# 绘图显示
sns.pairplot(df)
plt.show()
结果如下
06. 气泡图
气泡图本质是一个散点图,其中圆圈大小被映射到第三数值变量的值。
import matplotlib.pyplot as plt
import seaborn as sns
from gapminder import gapminder
# 导入数据
data = gapminder.loc[gapminder.year == 2007]
# 使用 scatterplot 创建气泡图
sns.scatterplot(data=data, x="gdpPercap", y="lifeExp", size="pop", legend=False, sizes=(20, 2000))
# 显示
plt.show()
结果如下
07. 连接散点图
连接散点图就是一个线图,其中每个数据点由圆形或任何类型的标记展示。
import matplotlib.pyplot as plt
import numpy as np
import pandas as pd
# 创建数据
df = pd.DataFrame({'x_axis': range(1, 10), 'y_axis': np.random.randn(9) * 80 + range(1, 10)})
# 绘制显示
plt.plot('x_axis', 'y_axis', data=df, linestyle='-', marker='o')
plt.show()
08. 雷达图
雷达图,可以可视化多个定量变量的一个或多个系列的值。
每个变量都有自己的轴,所有轴都连接在图形的中心。
import matplotlib.pyplot as plt
import pandas as pd
from math import pi
# 设置数据
df = pd.DataFrame({'group': ['yun', 'ding', 'shu', 'mo'],'var1': [38, 1.5, 30, 4],'var2': [29, 10, 9, 34],'var3': [8, 39, 23, 24],'var4': [7, 31, 33, 14],'var5': [28, 15, 32, 14]
})
# 目标数量
categories = list(df)[1:]
N = len(categories)
# 角度
angles = [n / float(N) * 2 * pi for n in range(N)]
angles += angles[:1]
# 初始化
ax = plt.subplot(111, polar=True)
# 设置第一个
ax.set_theta_offset(pi / 2)
ax.set_theta_direction(-1)
# 添加背景信息
plt.xticks(angles[:-1], categories)
ax.set_rlabel_position(0)
plt.yticks([10, 20, 30], ["10", "20", "30"], color="grey", size=7)
plt.ylim(0, 40)
# 添加数据图
# 第一个
values = df.loc[0].drop('group').values.flatten().tolist()
values += values[:1]
ax.plot(angles, values, linewidth=1, linestyle='solid', label="yun")
ax.fill(angles, values, 'b', alpha=0.1)
# 第二个
values = df.loc[1].drop('group').values.flatten().tolist()
values += values[:1]
ax.plot(angles, values, linewidth=1, linestyle='solid', label="ding")
ax.fill(angles, values, 'r', alpha=0.1)
# 第三个
values = df.loc[2].drop('group').values.flatten().tolist()
values += values[:1]
ax.plot(angles, values, linewidth=1, linestyle='solid', label="shu")
ax.fill(angles, values, 'r', alpha=0.1)
# 第四个
values = df.loc[3].drop('group').values.flatten().tolist()
values += values[:1]
ax.plot(angles, values, linewidth=1, linestyle='solid', label="mo")
ax.fill(angles, values, 'r', alpha=0.1)
# 添加图例
plt.legend(loc='upper right', bbox_to_anchor=(0.1, 0.1))
# 显示
plt.show()
09. 棒棒糖图
棒棒糖图是柱状图的一种变形,显示一个线段和一个圆。
import matplotlib.pyplot as plt
import pandas as pd
import numpy as np
# 创建数据
df = pd.DataFrame({'group': list(map(chr, range(65, 85))), 'values': np.random.uniform(size=20) })
# 排序取值
ordered_df = df.sort_values(by='values')
my_range = range(1, len(df.index)+1)
# 创建图表
plt.stem(ordered_df['values'])
plt.xticks(my_range, ordered_df['group'])
# 显示
plt.show()
10. 径向柱图
径向柱图同样也是条形图的变形,但是使用极坐标而不是直角坐标系。
import pandas as pd
import matplotlib.pyplot as plt
import numpy as np
# 生成数据
df = pd.DataFrame({'Name': ['item ' + str(i) for i in list(range(1, 51)) ],'Value': np.random.randint(low=10, high=100, size=50)})
# 排序
df = df.sort_values(by=['Value'])
# 初始化画布
plt.figure(figsize=(20, 10))
ax = plt.subplot(111, polar=True)
plt.axis('off')
# 设置图表参数
upperLimit = 100
lowerLimit = 30
labelPadding = 4
# 计算最大值
max = df['Value'].max()
# 数据下限 10, 上限 100
slope = (max - lowerLimit) / max
heights = slope * df.Value + lowerLimit
# 计算条形图的宽度
width = 2*np.pi / len(df.index)
# 计算角度
indexes = list(range(1, len(df.index)+1))
angles = [element * width for element in indexes]
# 绘制条形图
bars = ax.bar(x=angles,height=heights,width=width,bottom=lowerLimit,linewidth=2,edgecolor="white",color="#61a4b2",
)
# 添加标签
for bar, angle, height, label in zip(bars,angles, heights, df["Name"]):# 旋转rotation = np.rad2deg(angle)# 翻转alignment = ""if angle >= np.pi/2 and angle < 3*np.pi/2:alignment = "right"rotation = rotation + 180else:alignment = "left"# 最后添加标签ax.text(x=angle,y=lowerLimit + bar.get_height() + labelPadding,s=label,ha=alignment,va='center',rotation=rotation,rotation_mode="anchor")
plt.show()
11. 维恩图
维恩图,显示不同组之间所有可能的关系。
import matplotlib.pyplot as plt
from matplotlib_venn import venn2
# 创建图表
venn2(subsets=(10, 5, 2), set_labels=('Group A', 'Group B'))
# 显示
plt.show()
12. 饼图
饼图将圆划分成一个个扇形区域,每个区域代表在整体中所占的比例。
import matplotlib.pyplot as plt
# 创建数据
size_of_groups = [12, 11, 3, 30]
# 生成饼图
plt.pie(size_of_groups)
plt.show()
13. 折线图
折线图是最常见的图表类型之一。
将各个数据点标志连接起来的图表,用于展现数据的变化趋势。
import matplotlib.pyplot as plt
import numpy as np
# 创建数据
values = np.cumsum(np.random.randn(1000, 1))
# 绘制图表
plt.plot(values)
plt.show()
14. 堆叠面积图
堆叠面积图表示若干个数值变量的数值演变。
每个显示在彼此的顶部,易于读取总数,但较难准确读取每个的值。
import matplotlib.pyplot as plt
# 创建数据
x = range(1, 6)
y1 = [1, 4, 6, 8, 9]
y2 = [2, 2, 7, 10, 12]
y3 = [2, 8, 5, 10, 6]
# 生成图表
plt.stackplot(x, y1, y2, y3, labels=['A', 'B', 'C'])
plt.legend(loc='upper left')
plt.show()
15. 河流图
河流图是一种特殊的流图, 它主要用来表示事件或主题等在一段时间内的变化。
围绕着中心轴显示,且边缘是圆形的,从而形成流动的形状。
import matplotlib.pyplot as plt
import numpy as np
from scipy import stats# 添加数据
x = np.arange(1990, 2020)
y = [np.random.randint(0, 5, size=30) for _ in range(5)]def gaussian_smooth(x, y, grid, sd):"""平滑曲线"""weights = np.transpose([stats.norm.pdf(grid, m, sd) for m in x])weights = weights / weights.sum(0)return (weights * y).sum(1)# 自定义颜色
COLORS = ["#D0D1E6", "#A6BDDB", "#74A9CF", "#2B8CBE", "#045A8D"]# 创建画布
fig, ax = plt.subplots(figsize=(10, 7))# 生成图表
grid = np.linspace(1985, 2025, num=500)
y_smoothed = [gaussian_smooth(x, y_, grid, 1) for y_ in y]
ax.stackplot(grid, y_smoothed, colors=COLORS, baseline="sym")# 显示
plt.show()
16.地图
适用于地理空间数据分析
import pandas as pd
import folium# 创建地图对象
m = folium.Map(location=[20, 0], tiles="OpenStreetMap", zoom_start=2)# 创建图标数据
data = pd.DataFrame({'lon': [-58, 2, 145, 30.32, -4.03, -73.57, 36.82, -38.5],'lat': [-34, 49, -38, 59.93, 5.33, 45.52, -1.29, -12.97],'name': ['Buenos Aires', 'Paris', 'melbourne', 'St Petersbourg', 'Abidjan', 'Montreal', 'Nairobi', 'Salvador'],'value': [10, 12, 40, 70, 23, 43, 100, 43]
}, dtype=str)# 添加信息
for i in range(0,len(data)):folium.Marker(location=[data.iloc[i]['lat'], data.iloc[i]['lon']],popup=data.iloc[i]['name'],).add_to(m)# 保存
m.save('map.html')
国一大佬也收藏的16个Python数据可视化案例(附源码)相关推荐
- 推荐收藏|又带来了12个炫酷的数据可视化作品含源码
之前分享了10个炫酷的数据可视化大屏源码,反响很大,好多人在后台回复获取源码,这次,我又带来了12个炫酷的数据可视化大屏源码,都是从网上收集的,都测试后可以使用,在我电脑(1920X1080分辨率下) ...
- 熬夜整理出了70个清华大佬都在用的Python经典练手项目【附源码】
我们都知道,不管学习那门语言最终都要做出实际的东西来,而对于编程而言,这个实际的东西当然就是项目啦,不用我多说大家都知道学编程语言做项目的重要性. 于是,小编熬了几个通宵,终于整理出了70个清华大佬都 ...
- 国密SM3密码杂凑算法原理及实现(附源码)
相关文章: 国密SM3哈希算法原理及实现(附源码) SHA1哈希算法原理及实现(附源码) MD5哈希算法原理及实现(附源码) MD4哈希算法原理及实现(附源码) MD2哈希算法原理及实现(附源码) M ...
- android s905 编译_NanoPi K2 (Amlogic S905) Ubuntu 16.04 编译Android 5.1系统源码
NanoPi K2 (Amlogic S905) Ubuntu 16.04 编译Android 5.1系统源码 1. 下载源码 在这里下载https://www.mediafire.com/folde ...
- 牛皮!竟然有大佬基于 Spring Boot + Vue 开发了一套网易云amp;QQ音乐(附源码)。。。...
来源:segmentfault.com/a/1190000021376934 # 前言 虽然 B/S 是目前开发的主流,但是 C/S 仍然有很大的市场需求.受限于浏览器的沙盒限制,网页应用无法满足某些 ...
- 值得收藏的45个Python优质资源(附链接)
授权自AI科技大本营(ID:rgznai100) 本文共4157字,建议阅读7分钟. 本文为大家挑选了适合初学的45个Python的优质项目. 热门资源博客 Mybridge AI 比较了18000个 ...
- 2022国赛数模A题思路以及解析(附源码 可供学习训练使用)
需要全部源码或者论文请点赞关注收藏后评论区留言 前言 发布已获得创作队伍的同意,论文最终斩获省一等奖,写的十分优秀,可供后面的数模比赛训练参考 摘要 基于摇荡模型的波浪能装置最大输出功率设计问题研究 ...
- (建议收藏)第一人称视角带你走进 Vue 源码世界
点击上方关注 前端技术江湖,一起学习,天天进步 前言 本文不引战,成熟的人应该脱离框架的范畴,而不是纠结谁更好或者谁更不好.有道是黑猫白猫,抓到老鼠就是好猫. 所以本文会带大家读源码.简单易懂,大佬小 ...
- 「建议收藏」第一人称视角带你走进 Vue 源码世界
前言 本文不引战,成熟的人应该脱离框架的范畴,而不是纠结谁更好或者谁更不好.有道是黑猫白猫,抓到老鼠就是好猫. 所以本文会带大家读源码.简单易懂,大佬小白都能看明白.并收获益处. 从 new 一个 V ...
- python时间序列可视化_TOP50 Python可视化经典案例下(附源码,建议收藏)
昨天行哥给大家统计了数据可视化前30张图表代码和案例给大家,今天把分享Python可视化案例TOP 50下,如果想转行做数据分析,这两篇推文强烈建议收藏,对于学习有任何问题都可以点击阅读原文向行哥提问 ...
最新文章
- Testing and Test-First Programming
- discuz论坛 java,如何添加Discuz论坛的应用
- 转载 雨松mono Unity获取游戏对象详解(来自我的长微博)
- leetcode面试题 02.08. 环路检测
- Object.prototype的成员介绍
- Linux常用命令(第二版) --权限管理命令
- 剑指offer系列48---左旋转字符串
- 车rc陀螺仪测试软件,利用加速度计和陀螺仪测量车辆运动
- 转:关于市场上几家PB系统简介
- iWebOffice使用VBA控制字体
- mysql中使用order by 排序时使用if()函数应用场景。
- Microsoft HoloLens 技术解谜(下)
- python 绘图 坐标轴范围 颜色 保存
- matlab三角形面积,matlab中计算三角形面积?
- 亲测centos下mysql安装,不行锤我
- jSignature 插件实现手写电子签名
- 一行命令 Ping 网段所有 IP
- WEB安全基础简单总结(有些无序,大佬勿喷)
- [翻译]Gallery Server Pro ----用于分享相片,视频,音频及其他媒体的ASP.NET相册[Carol]...
- 开发环境配置--windows许可证过期
热门文章
- 稳定状态模型 (三):Volterra 模型
- Eclipse更换护眼背景色——传说中的绿豆沙
- 微信会员卡实现门店信息化会员管理
- docker搭建searx_『颜值即正义』看小睿“自建搜索引擎”
- Not have a lick 没有一丁点儿
- leetcode 376. 摆动序列(三种解法)
- 打印机能两个计算机共用吗,打印机共享线_两台电脑用一台打印机_分线器可以接打印机吗...
- 移动端和pc端的区别html,pc端是什么意思(PC端和移动端有哪些区别?)
- 《平成的超级偶像金牌舔狗》之mmdetection,paddle detection安装,demo跑通,训练跑通,保姆级教学
- 多表古典密码统计分析