当前位置: 首页 > news >正文

数据可视化---使用matplotlib绘制高级图表(2)

题目一:绘制人口金字塔图

编写程序。根据第8.6,绘制如下图的人口金字塔图。

运行代码:

#绘制人口金字塔图
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif'] = 'SimHei'
plt.rcParams['axes.unicode_minus'] = Falsedf = pd.read_excel(r"D:\数据可视化\14\population.xlsx")
df_male = df.groupby(by='Gender').get_group("Male")
list_male = df_male['Number'].values.tolist()
df_female = df.groupby(by='Gender').get_group('Female')
list_female = df_female['Number'].values.tolist()
df_age = df.groupby('AgeGroup').sum()
count = df_age.shape[0]
y = np.arange(1, 11)
labels = []
for i in range(count):age = df_age.index[i]labels.append(age)
fig = plt.figure()
ax = fig.add_subplot(111)
ax.barh(y, list_male, tick_label=labels, label = '男', color='#6699FF')
ax.barh(y, list_female, tick_label=labels, label = '女', color='#CC6699')
ax.set_ylabel("年龄段(岁)")
ax.set_xticks([-100000, -75000, -50000, -25000, 0, 25000, 50000, 75000, 100000])
ax.set_xticklabels(['100000', '75000', '50000', '25000', '0', '25000', '50000', '75000', '100000'])
ax.set_xlabel('人数(个)')
ax.set_title('某城市人口金字塔')
ax.legend()
plt.show()

运行结果:

题目二:绘制漏斗图

编写程序。根据第8.7,绘制如下图的漏斗图。

运行代码:

#绘制漏斗图
import numpy as np
import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif'] = 'SimHei'
plt.rcParams['axes.unicode_minus'] = False
num = 5
height=0.5
x1 = np.array([1000, 500, 300, 200, 150])
x2 = np.array((x1.max()-x1)/2)
x3 = [i+j for i, j in zip(x1, x2)]
x3 = np.array(x3)
y = -np.sort(-np.arange(num))
labels = ['访问商品', '加购物车', '生成订单', '支付订单', '完成交易']
fig = plt.figure(figsize=(10, 8))
ax = fig.add_subplot(111)
#绘制条形图
rects1 = ax.barh(y, x3, height, tick_label=labels, color='g', alpha=0.5)
#绘制辅助条形图
rects2 = ax.barh(y, x2, height, color='w', alpha=1)
ax.plot(x3, y, 'black', alpha=0.7)
ax.plot(x2, y, 'black', alpha=0.7)
notes = []
for i in range(0, len(x1)):notes.append('%.2f%%'%((x1[i]/x1[0])*100))
for rect_one, rect_two, note in zip(rects1, rects2, notes):text_x = rect_two.get_width() + (rect_one.get_width()-rect_two.get_width())/2-30text_y = rect_one.get_y() + height/2ax.text(text_x, text_y, note, fontsize=12)
ax.set_xticks([])
for direction in ['top', 'left', 'bottom', 'right']:ax.spines[direction].set_color('none')
ax.yaxis.set_ticks_position('none')
plt.show()

运行结果:

题目三:绘制桑基图

编写程序。根据第8.8,绘制如下图的桑基图

运行代码:

#绘制桑基图
from matplotlib.sankey import Sankey
import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif'] = 'SimHei'
plt.rcParams['axes.unicode_minus'] = Falseflows = [0.7, 0.3, -0.3, -0.1, -0.3, -0.1, -0.1, -0.1]
labels = ['工资', '副业', '生活', '购物', '深造', '运动', '其他', '买书']
orientations = [1, 1, 0, -1, 1, -1, 1, 0]
sankey = Sankey()
sankey.add(flows = flows, labels=labels, orientations=orientations, color='black', fc='lightgreen', patchlabel='生活消费', alpha=0.7)
#桑基图绘制完成的对象
diagrams = sankey.finish()
diagrams[0].texts[4].set_color('r')
diagrams[0].texts[4].set_weight('bold')
diagrams[0].text.set_fontsize(20)
diagrams[0].text.set_fontweight('bold')
plt.title("日常生活开销的桑基图")
plt.show()

运行结果:

题目四:绘制树状图

编写程序。根据第8.9,绘制如下图的树状图。

运行代码:

#绘制树状图
import pandas as pd
import matplotlib.pyplot as plt
import scipy.cluster.hierarchy as shc
plt.rcParams['font.sans-serif'] = 'SimHei'
plt.rcParams['axes.unicode_minus'] = Falsedf = pd.read_excel(r"D:\数据可视化\14\USArrests.xlsx")
plt.figure(figsize=(10, 6), dpi=80)
plt.title("美国各州犯罪案件的树状图", fontsize=12)
#绘制树状图
dend = shc.dendrogram(shc.linkage(df[['Murder', 'Assault', 'UrbanPop']], method='ward'), labels=df.State.values, color_threshold=100)
plt.xticks(fontsize=10.5)
plt.ylabel('案件数量(个)')
plt.show()

运行结果:

题目五:绘制华夫饼图

编写程序。根据第8.10,绘制如下图的华夫饼图。

运行代码:

#绘制华夫饼图
import matplotlib.pyplot as plt
from pywaffle import Waffle
plt.rcParams['font.sans-serif'] = 'SimHei'
plt.rcParams['axes.unicode_minus'] = False
#绘制华夫饼图
plt.figure(FigureClass=Waffle, rows=10, columns=10, values=[95, 5], vertical=True, colors=['#20B2AA', '#D3D3D3'],title={'label':'电影《少年的你》上座率'}, legend={'loc':'upper right', 'labels':['占座', '空座']})
plt.show()

运行结果:

相关文章:

  • MySQL—多表查询(概述、基本实操、分类)
  • 240.搜索二维矩阵
  • 开发指南027-微信支付
  • HR招聘面试测评,测评候选人的语言和表达能力
  • 数字化转型中存在的五大问题:意识、供给、成本、能力、竞争力培育
  • Linux命令locate:快速定位文件与目录
  • IO转换流
  • EasyRecovery数据恢复软件具有哪些功能特点?2025版本啥时候更新
  • 大数据学习问题记录
  • 一文读懂筛选控件设计
  • Python深度学习基于Tensorflow(16)基于Tensorflow的对话实例
  • python中有时使用pip安装库而有时又使用conda安装库,到底应该使用哪个管理工具进行库的安装呀?
  • SVG画双色虚线并带有流动效果
  • Java - 随机存取文件类
  • c++自定义定时器
  • 【RocksDB】TransactionDB源码分析
  • 2017 年终总结 —— 在路上
  • 4月23日世界读书日 网络营销论坛推荐《正在爆发的营销革命》
  • Flannel解读
  • java 多线程基础, 我觉得还是有必要看看的
  • JavaScript服务器推送技术之 WebSocket
  • Joomla 2.x, 3.x useful code cheatsheet
  • leetcode386. Lexicographical Numbers
  • Rancher如何对接Ceph-RBD块存储
  • Vue--数据传输
  • Wamp集成环境 添加PHP的新版本
  • 基于Javascript, Springboot的管理系统报表查询页面代码设计
  • 使用Gradle第一次构建Java程序
  • 算法系列——算法入门之递归分而治之思想的实现
  • 通过来模仿稀土掘金个人页面的布局来学习使用CoordinatorLayout
  • 一个SAP顾问在美国的这些年
  • 怎么把视频里的音乐提取出来
  • ​软考-高级-系统架构设计师教程(清华第2版)【第15章 面向服务架构设计理论与实践(P527~554)-思维导图】​
  • #AngularJS#$sce.trustAsResourceUrl
  • (arch)linux 转换文件编码格式
  • (黑马C++)L06 重载与继承
  • (经验分享)作为一名普通本科计算机专业学生,我大学四年到底走了多少弯路
  • (十) 初识 Docker file
  • (十一)图像的罗伯特梯度锐化
  • (一)SvelteKit教程:hello world
  • (原创)Stanford Machine Learning (by Andrew NG) --- (week 9) Anomaly DetectionRecommender Systems...
  • ******IT公司面试题汇总+优秀技术博客汇总
  • .MSSQLSERVER 导入导出 命令集--堪称经典,值得借鉴!
  • .NET CORE Aws S3 使用
  • .NET Core跨平台微服务学习资源
  • .net core使用EPPlus设置Excel的页眉和页脚
  • .net安装_还在用第三方安装.NET?Win10自带.NET3.5安装
  • .Net的DataSet直接与SQL2005交互
  • .NET的数据绑定
  • .net快速开发框架源码分享
  • @data注解_SpringBoot 使用WebSocket打造在线聊天室(基于注解)
  • @ModelAttribute注解使用
  • [ CTF ] WriteUp-2022年春秋杯网络安全联赛-冬季赛
  • [AIGC] 使用Curl进行网络请求的常见用法
  • [Angular 基础] - 自定义指令,深入学习 directive