"Python可视化神作:16大案例,国界大佬私藏,源码放送!"
moboyou 2025-07-13 21:10 3 浏览
数据可视化是数学建模比赛中关键的一步。
同学们在以数据可视化表现某些数据时可以尝试使用 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 + 180
else:
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')
结果如下:
相关推荐
- 软件下载超级合集(软件大集合)
-
注:AutoCAD软件解压密码均为:www.cadzxw.com(网址就是解压密码)AutoCAD2004:链接:http://pan.baidu.com/s/1i5yL4UT密码:wpxcAutoC...
- Discuz! Database Error(discuzdatabaseerror怎么解决)
-
(1017)Can'tfindfile:'./xyw/common_syscache.frm'(errno:13)SELECT*FROMcommon_syscacheWHERE`...
- 想在天上赏月?最全攻略来了(形容在天上赏月)
-
“但愿人长久,千里共婵娟。”赏月,是中秋夜的传统习俗之一。在地上赏月,或许人们已经习以为常,但在天上赏月又是怎样一番景象?记者梳理发现,为了满足广大旅客“上九天摘星揽月”的需求,春秋航空、南方航空等多...
- APP检测:安卓系统四大组件介绍(安卓的四大组件是什么?分别有什么作用?)
-
1、Activity组件漏洞Activity是Android组件中*基本也是*为常见用的四大组件之一,是一个负责与用户交互的组件。Activity组件中存在以下常见的漏洞。(1)activity绑定b...
- Markdown + 文档管理 + 静态网页生成,集大成的 Markdown 应用:MWeb
-
上周给大家推荐了Typora,作为一款纯粹的Markdown应用来说,它的各种功能和细节可以说已经相当极致,然而,Ulysses用户表示:我们想要的不仅仅是Markdown。是的,Markdo...
- Istio多集群实践(多集群架构)
-
为了实现应用高并发和高可用,企业通常会选择将应用部署在多个地域的多个集群,甚至多云、混合云环境中。在这种情况下,如何在多个集群中部署和管理应用,成为了一个挑战,当然多集群方案也逐步成为了企业应用部署的...
- 源码建站的流程是什么(有源码怎么建站)
-
1.选择适合自己需求的源码:在进行源码建站前,需要根据自己的需求选定一款适合自己的源码,一般建议选择流行度较高、稳定性较好的开源程序,如WordPress、Discuz等。2.下载源码:根据选择的...
- 论坛站长福利!积分墙Discuz插件火爆上线!
-
一款新型的Discuz插件正在火爆袭来,克服种种插件的弊端,全新打造,让你成为最成功最轻松的赚钱能手,这就是积分墙Discuz插件。积分墙Discuz插件(http://www.jifenqiang....
- 2020年了,公司还有必要做企业网站吗?网站开发是否过时呢
-
作为一个以网站开发起步的程序员,回想起来,曾经为不少客户做了网站。而我自己的网站已经六七年没有更新了,本想重新设计升级,但一直忙于做客户的系统开发,自己的网站就一直不管了,反正也没什么用,做得好还经常...
- 放大招,这才是低代码真正的形态PHP工作流引擎
-
放大招,这才是低代码真正的形态。来点干货,今天上点重头戏。表单设计中其实相对还是比较复杂的,比如常见的脚本,比如要控制一个默认的数值,大家可以看平台能够做到页面可以想输,输出什么?添加的时候进行操作。...
- OA源码解析:深入研究企业办公自动化系统的核心代码
-
随着信息技术的迅速发展,企业办公自动化(OfficeAutomation,简称OA)系统已成为现代企业管理中不可或缺的一部分。这些系统通过集成各种办公功能,如文档管理、流程管理、协作与通信等,极大地...
- 用PHP写了个数据分析框架示例代码
-
下面是一个简单的PHP数据分析框架的示例:```php<?php//1.数据收集functioncollectData(){//从数据库或API获取数据//...}//2.数据清...
- 「2022/02/02」thinkphp源码详细阅读(一)
-
thinkphp源码详细阅读(一)请求流程1.从入口index.php开始2.实例化App,我们看一下实例化所做的工作3.设置thinkPath、rootPath、appPath、...
- 【源码】效果最好的网格Shader(迄今为止)
-
我一直都在写Shader,其中有一个特定的Shader我一直想写好,但我总是因为一些我无法完全理解的原因而失败。然后过了几年,我用新学到的知识再次尝试,越来越接近,然后又失败。是什么Shader?模拟...
- 干货来了,一夜加粉百万的柏拉图源码仍给你
-
相信大家这几天都看到过一些关于“柏拉图app”公众号被封号的文章,主要内容是由于“柏拉图APP”推送的一条图文,叫做《生成你的性格标签,为自己带盐》,然后再短短的数日,柏拉图APP公众号便涨粉百万,阅...
- 一周热门
- 最近发表
- 标签列表
-
- 外键约束 oracle (36)
- oracle的row number (32)
- 唯一索引 oracle (34)
- oracle in 表变量 (28)
- oracle导出dmp导出 (28)
- oracle两个表 (20)
- oracle 数据库 字符集 (20)
- oracle安装补丁 (19)
- matlab化简多项式 (20)
- 多线程的创建方式 (29)
- 多线程 python (30)
- java多线程并发处理 (32)
- 宏程序代码一览表 (35)
- c++需要学多久 (25)
- css class选择器用法 (25)
- css样式引入 (30)
- html5和css3新特性 (19)
- css教程文字移动 (33)
- php简单源码 (36)
- php个人中心源码 (25)
- 网站管理平台php源码 (19)
- php小说爬取源码 (23)
- github好玩的php项目 (18)
- 云电脑app源码 (22)
- js创建txt文件 (18)