数据可视化是数学建模比赛中关键的一步。

同学们在以数据可视化表现某些数据时可以尝试使用 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数据可视化案例(附源码)相关推荐

  1. 推荐收藏|又带来了12个炫酷的数据可视化作品含源码

    之前分享了10个炫酷的数据可视化大屏源码,反响很大,好多人在后台回复获取源码,这次,我又带来了12个炫酷的数据可视化大屏源码,都是从网上收集的,都测试后可以使用,在我电脑(1920X1080分辨率下) ...

  2. 熬夜整理出了70个清华大佬都在用的Python经典练手项目【附源码】

    我们都知道,不管学习那门语言最终都要做出实际的东西来,而对于编程而言,这个实际的东西当然就是项目啦,不用我多说大家都知道学编程语言做项目的重要性. 于是,小编熬了几个通宵,终于整理出了70个清华大佬都 ...

  3. 国密SM3密码杂凑算法原理及实现(附源码)

    相关文章: 国密SM3哈希算法原理及实现(附源码) SHA1哈希算法原理及实现(附源码) MD5哈希算法原理及实现(附源码) MD4哈希算法原理及实现(附源码) MD2哈希算法原理及实现(附源码) M ...

  4. 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 ...

  5. 牛皮!竟然有大佬基于 Spring Boot + Vue 开发了一套网易云amp;QQ音乐(附源码)。。。...

    来源:segmentfault.com/a/1190000021376934 # 前言 虽然 B/S 是目前开发的主流,但是 C/S 仍然有很大的市场需求.受限于浏览器的沙盒限制,网页应用无法满足某些 ...

  6. 值得收藏的45个Python优质资源(附链接)

    授权自AI科技大本营(ID:rgznai100) 本文共4157字,建议阅读7分钟. 本文为大家挑选了适合初学的45个Python的优质项目. 热门资源博客 Mybridge AI 比较了18000个 ...

  7. 2022国赛数模A题思路以及解析(附源码 可供学习训练使用)

    需要全部源码或者论文请点赞关注收藏后评论区留言 前言 发布已获得创作队伍的同意,论文最终斩获省一等奖,写的十分优秀,可供后面的数模比赛训练参考 摘要 基于摇荡模型的波浪能装置最大输出功率设计问题研究 ...

  8. (建议收藏)第一人称视角带你走进 Vue 源码世界

    点击上方关注 前端技术江湖,一起学习,天天进步 前言 本文不引战,成熟的人应该脱离框架的范畴,而不是纠结谁更好或者谁更不好.有道是黑猫白猫,抓到老鼠就是好猫. 所以本文会带大家读源码.简单易懂,大佬小 ...

  9. 「建议收藏」第一人称视角带你走进 Vue 源码世界

    前言 本文不引战,成熟的人应该脱离框架的范畴,而不是纠结谁更好或者谁更不好.有道是黑猫白猫,抓到老鼠就是好猫. 所以本文会带大家读源码.简单易懂,大佬小白都能看明白.并收获益处. 从 new 一个 V ...

  10. python时间序列可视化_TOP50 Python可视化经典案例下(附源码,建议收藏)

    昨天行哥给大家统计了数据可视化前30张图表代码和案例给大家,今天把分享Python可视化案例TOP 50下,如果想转行做数据分析,这两篇推文强烈建议收藏,对于学习有任何问题都可以点击阅读原文向行哥提问 ...

最新文章

  1. Testing and Test-First Programming
  2. discuz论坛 java,如何添加Discuz论坛的应用
  3. 转载 雨松mono Unity获取游戏对象详解(来自我的长微博)
  4. leetcode面试题 02.08. 环路检测
  5. Object.prototype的成员介绍
  6. Linux常用命令(第二版) --权限管理命令
  7. 剑指offer系列48---左旋转字符串
  8. 车rc陀螺仪测试软件,利用加速度计和陀螺仪测量车辆运动
  9. 转:关于市场上几家PB系统简介
  10. iWebOffice使用VBA控制字体
  11. mysql中使用order by 排序时使用if()函数应用场景。
  12. Microsoft HoloLens 技术解谜(下)
  13. python 绘图 坐标轴范围 颜色 保存
  14. matlab三角形面积,matlab中计算三角形面积?
  15. 亲测centos下mysql安装,不行锤我
  16. jSignature 插件实现手写电子签名
  17. 一行命令 Ping 网段所有 IP
  18. WEB安全基础简单总结(有些无序,大佬勿喷)
  19. [翻译]Gallery Server Pro ----用于分享相片,视频,音频及其他媒体的ASP.NET相册[Carol]...
  20. 开发环境配置--windows许可证过期

热门文章

  1. 稳定状态模型 (三):Volterra 模型
  2. Eclipse更换护眼背景色——传说中的绿豆沙
  3. 微信会员卡实现门店信息化会员管理
  4. docker搭建searx_『颜值即正义』看小睿“自建搜索引擎”
  5. Not have a lick 没有一丁点儿
  6. leetcode 376. 摆动序列(三种解法)
  7. 打印机能两个计算机共用吗,打印机共享线_两台电脑用一台打印机_分线器可以接打印机吗...
  8. 移动端和pc端的区别html,pc端是什么意思(PC端和移动端有哪些区别?)
  9. 《平成的超级偶像金牌舔狗》之mmdetection,paddle detection安装,demo跑通,训练跑通,保姆级教学
  10. 多表古典密码统计分析