8.1、绘制等高线图
等高线图是地形上高程相等的相邻各点所连成的闭合曲线,它会将地面上海拔高度相同的点连成环线,之后将环线垂直投影到某一水平面上,并按照一定的比例缩绘到图纸上。
在matplotlib中,pyplot可以使用contour()、contourf()函数分别绘制和填充等高线图。
X,Y:表示坐标点的网格数据
Z:表示坐标点对应的高度数据
levels:表示等高线的数量。
colors:表示不同高度的等高线颜色
cmap:表示颜色的映射表
linewidths:表示等高线的宽度
linestyle:表示等高线的线型
Axes类的对象也可以使用contour(),contourf()方法绘制和填充等高线。
示例代码如下:
import numpy as np
import matplotlib.pyplot as plt
def calcu_elevation(x1,y1):
h=(1-x1/2+x15+y13)*np.exp(-x12-y12)
return h
n=256
x=np.linspace(-1,2,n)
y=np.linspace(-1,2,n)
x_grid,y_grid=np.meshgrid(x,y)
fig=plt.figure()
ax=fig.add_subplot(111)
con=ax.contour(x_grid,y_grid,calcu_elevation(x_grid,y_grid),
8,colors=‘black’)
ax.contourf(x_grid,y_grid,calcu_elevation(x_grid,y_grid),
8,alpha=0.75,cmap=plt.cm.copper)
ax.clabel(con,inline=True,fmt=‘%1.1f’,fontsize=10)
ax.set_xticks([])
ax.set_yticks([])
plt.title(‘51’)
plt.show()

8.2、绘制矢量场流线图
该函数常用参数含义如下:
x,y:表示间距均匀的网格数据
u,v:表示(x,y)速率的二维数组
density:表示流线的密度
arrowsize:表示箭头的大小
arrowstyle:表示箭头的类型
minlength:表示流线的最小长度
maxlength:表示流线的最大长度
Axes类的对象也可以使用streamplot()方法绘制矢量场流线图
示例代码如下:
import numpy as np
import matplotlib.pyplot as plt
y,x=np.mgrid[0:5:50j,0:5:50j]
u=x
v=y
fig=plt.figure()
ax=fig.add_subplot(111)
ax.streamplot(x,y,u,v,density=2)
plt.title(‘51’)
plt.show()

8.3、绘制棉棒图
x,y:表示茎的x值和茎头的y 值
linefmt:表示茎属性的字符串
markerfmt:表示茎头属性的字符串
basefmt:表示基线属性的字符串
bottom:表示基线的y值
label:表示应用于图例的标签
use_line_collection:若设为True,则将棉棒图的所有线段存储到一个LineCollection类对象中,若设为False,则将棉棒图的所有线段存储到列表中。。
stem()函数会返回一个形如(markerline,stemline,baseline)的三元组。
示例代码如下:

import numpy as np
import matplotlib.pyplot as plt
plt.rcParams[‘font.sans-serif’]=‘SimHei’
plt.rcParams[‘axes.unicode_minus’]=False
x=np.arange(1,16)
y=np.array([5.9,6.2,6.7,7.0,7.1,7.1,7.4,7.5,
7.6,7.7,7.7,7.7,7.8,7.9,8.0])
labels=np.array([‘宝骏310’,‘宝马i3’,‘兰博基尼’,‘奥迪’,‘玛莎拉蒂’,‘大黄蜂’,
‘劳斯莱斯’,‘致享’,‘乐风’,‘和悦’,‘威驰’,‘夏利’,‘启辰’,‘致炫’,‘赛欧’])
fig=plt.figure(figsize=(10,6),dpi=80)
ax=fig.add_subplot(111)
markerline,stemlines,baseline=ax.stem(x,y,linefmt=‘-.’,
markerfmt=‘*’,label=‘TestStem’,use_line_collection=True)
plt.setp(stemlines,lw=1)
plt.setp(markerline,color=‘#CC6699’)
ax.set_title(‘不同品牌汽车的燃料消耗量 51’,fontdict={‘size’:18})
ax.set_ylabel(‘燃料消耗量’)
ax.set_xticks(x)
ax.set_xticklabels(labels,rotation=60)
ax.set_ylim([0,10])
for temp_x,temp_y in zip(x,y):
ax.text(temp_x,temp_y+0.5,s=‘{}’.format(temp_y),ha=‘center’,
va=‘bottom’,fontsize=14)
plt.show()

8.4、绘制哑铃图
使用pandas读取health.xlsx文件的数据,并根据读取的数据绘制有散点和线组成的哑铃图。
示例代码如下:

import pandas as pd
import matplotlib.pyplot as plt
import matplotlib.lines as mlines
plt.rcParams[‘font.sans-serif’]=‘SimHei’
plt.rcParams[‘axes.unicode_minus’]=False
df=pd.read_excel(r"C:\Users\Administrator\Desktop\health.xlsx")
df.sort_values(‘pct_2014’,inplace=True)
df.reset_index(inplace=True)
df=df.sort_values(by=“index”)
def newline(p1,p2,color=‘black’):
ax=plt.gca()
l=mlines.Line2D([p1[0],p2[0]],[p1[1],p2[1]],color=‘skyblue’)
ax.add_line(l)
return l
fig,ax=plt.subplots(1,1,figsize=(8,6))
ax.scatter(y=df[‘index’],x=df[‘pct_2013’],s=50,
color=‘#0e668b’,alpha=0.7)
ax.scatter(y=df[‘index’],x=df[‘pct_2014’],s=50,
color=‘#a3c4dc’,alpha=0.7)
for i,p1,p2 in zip(df[‘index’],df[‘pct_2013’],df[‘pct_2014’]):
newline([p1,i],[p2,i])
ax.set_title(‘2013年与2014年PCT指标变化率 51’,fontdict={‘size’:12})
ax.set_xlim(0,.25)
ax.set_xticks([.05,.1,.15,.20])
ax.set_xticklabels([‘%5’,‘%10’,‘%15’,‘%20’])
ax.set_xlabel(‘变化率’)
ax.set_yticks(df[‘index’])
ax.set_yticklabels(df[‘city’])
ax.grid(alpha=0.5,axis=‘x’)
plt.show()

8.5、制作甘特图
甘特图亦称为横道图、条状图,它通过活动列表和时间刻度表示特定项目的顺序与持续时间。
甘特图类似于条形图,这两种图表的图形都是横向矩形条,但甘特图中每个矩形条的起始位置是不同的。
使用pyplot的barh()函数可以绘制一个甘特图只需要给该函数的left参数传值,指定每个矩形条的x坐标即可。
示例代码如下:

import numpy as np
import matplotlib.pyplot as plt
ticks=np.array([‘报告提交’,‘数据分析’,‘数据录入’,‘实地执行’,
‘问卷确定’,‘试访’,‘问卷设计’,‘项目确定’])
y_data=np.arange(1,9)
x_data=np.array([0.5,1.5,1,3,0.5,1,1,2])
fig,ax=plt.subplots(1,1)
ax.barh(y_data,x_data,tick_label=ticks,
left=[7.5,6,5.5,3,3,2,1.5,0],color=‘skyblue’)
[ax.spines[i].set_visible(False) for i in [‘top’,‘right’]]
ax.set_title(“任务甘特图 51”)
ax.set_xlabel(“日期”)
ax.grid(alpha=0.5,axis=‘x’)
plt.show()

8.6、绘制人口金字塔
人口金字塔图是指用类似古埃及金字塔的形象描述人口年龄与性别分布状况的图形,用于表现人口的现状及其发展类型。人口金字塔图中左侧的一组矩形条代表各年龄段男性的人口数,右侧的一组矩形条代表各年龄段女性的人口数。使用pyplot模块的barh()函数可以绘制一个人口金字塔图。
下面使用pandas读取population.xlsx文件的数据,并根据读取的数据绘制人口金字塔图。先将男性和女性参数单独提出来
import numpy as np
import matplotlib.pyplot as plt
import pandas as pd
plt.rcParams[‘font.sans-serif’]=‘SimHei’
plt.rcParams[‘axes.unicode_minus’]=False
df=pd.read_excel(r"C:\Users\Administrator\Desktop\population.xlsx")
df_male=df.groupby(by=‘Gender’).get_group(‘Male’)
df_male

list_male=df_male[‘Number’].values.tolist()
df_female=df.groupby(by=‘Gender’).get_group(‘Female’)
df_female

import numpy as np
import matplotlib.pyplot as plt
import pandas as pd
plt.rcParams[‘font.sans-serif’]=‘SimHei’
plt.rcParams[‘axes.unicode_minus’]=False
df=pd.read_excel(r"C:\Users\Administrator\Desktop\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=‘#CC6699’,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-30
text_y=rect_one.get_y()+height/2
ax.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.title(‘51’)
plt.show()

8.8、绘制桑葚图
桑基图是流图 的一种,用来描述能量,人口,经济等的流动情况。Sankey是一名船长也是工程师,1898年Sankey在土木工程师学会会报纪要的一篇关于蒸汽机能源效率的文章中首次推出了第一个能量流动图,后来被命名为Sankey图,中文音译为桑基图。桑基图中包含若干条从左到右延展的分支,每条分支的宽度代表数据流量的大小。
1、创建桑葚图
ax:若不提供该参数,则会创建一个新的坐标轴;
scale:表示流量比例的因子,用于按比例调整分支的宽度;
unit:表示与流量相关的物理单位的字符串.若设为None,则不会做数量标记;
gap:表示进入或离开顶部或底部的分支间距,默认为0.25;
2、添加桑葚图的选项
patchlabel:表示位于图表中心的标签;
flows:表示流量数据数组,其中投入数据为正值,产生数据为负值;
orientations:表示流的方向列表或用于所有流的单个方向,可以取值为0;
labels:表示流的标签列表或用于所有流的单个标签;
trunklength:表示输入组和输出组的基之间的长度;
3、返回桑葚图绘制完成的对象
patch:表示桑基子图的轮廓;
flows:表示流量值(输入为正,输出为负);
angles:表示箭头角度的列表;
tips:表示流路径的尖端或凹陷位置的数组,其中每一行是一个(x,y);
text:表示中心标签的Text实例;
texts:表示流分支标签的Text实例;
示例代码如下:

import matplotlib.pyplot as plt
from matplotlib.sankey import Sankey
plt.rcParams[‘font.sans-serif’]=‘SimHei’
plt.rcParams[‘axes.unicode_minus’]=False
flows=[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(“日常生活开支的桑基图 51”)
plt.show()

8.9、绘制树状图
树状图的绘制需要准备聚类数据。若单独使用matplotlib较为繁琐,因此这里可以结合scipy包的功能完成。scipy是一款基于numpy的、专为科学和工程设计的、易于使用的Python包,它提供了线性代数、傅里叶变换、信号处理等丰富的功能。
scipy.cluster模块中包含众多聚类算法,主要包括矢量量化和层次聚类两种,并分别封装到vq或hierarchy模块中。hierarchy模快中提供了一系列聚类的功能,可以轻松地生成聚类数据并绘制树状图。
1、dendrogram()函数
Z:表示编码层次聚类的链接矩阵
truncate_mode:表示截断的模式,用于压缩因规则矩阵过大而难以阅读的树状图,可以取值为None
color_threshold:表示颜色阈值
labels:表示节点对应的文本标签
2、linkage()函数
(1)y:可以是一维距离向量或二维的坐标矩阵
(2)method:表示计算类簇之间距离的方法,常用的取值可以为‘single’、‘complete’、‘average’、和‘ward’,各取值具体含义如下:
‘single’:表示将类簇与类簇之间最近的距离作为类簇间距
‘complete’:表示将类簇与类簇之间最远距离作为类簇间距
‘average’:表示将类簇与类簇之间的平均距离作为类簇间距
‘ward’:表示将类簇与类簇之间的方差最小化作为类簇间距
示例代码如下:

import pandas as pd
import matplotlib.pyplot as plt
import scipy.cluster.hierarchy as shc
plt.rcParams[‘font.family’]=‘simHei’
plt.rcParams[‘axes.unicode_minus’]=False
df =pd.read_excel(r’C:\Users\Administrator\Desktop\USArrests.xlsx’)
plt.figure(figsize=(10,6),dpi=80)
plt.title(“美国各州犯罪案件的树状图 51”,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、绘制华夫饼图
1、pywaffle的安装
可以直接在命令控制端pip命令安装pywaffle包。
pip install pywaffle
2、pywaffle的使用
FigureClass:可以是Figure类或Figure子类
rows:表示华夫饼图的行数
columns:表示华夫饼图的列数
values:表示数据,可以接收数组或字典
vertical:表示是否按垂直方向绘制华夫饼图,默认为False
legend:表示图例,可以接收一个字典
示例代码如下:

import matplotlib.pyplot as plt
from pywaffle import Waffle
plt.rcParams[‘font.family’]=‘simHei’
plt.rcParams[‘axes.unicode_minus’]=False
plt.figure(FigureClass=Waffle,rows=10,columns=10,
values=[95,5],vertical=True,colors=[‘skyblue’,‘#6699FF’],
title={‘label’:‘电影《少年的你》上座率’},
legend={‘loc’:‘upper right’,‘labels’:[‘占座’,‘空座’]})
plt.title(‘51’)
plt.show()

第八章、使用matplotlib绘制高级图表相关推荐

  1. 数据可视化第八章使用matplotlib绘制高级图表

    8.1 绘制等高线图 import numpy as np import matplotlib.pyplot as plt def calcu_elevation(x1, y1): h = (1-x1 ...

  2. 使用matplotlib绘制高级图表8

    1.绘制等高线图 使用contour()和contourf()函数绘制和填充等高线图 import numpy as np import matplotlib.pyplot as plt # 计算高度 ...

  3. 使用matplotlib绘制3D图表

    欢迎关注"生信修炼手册"! 除了绘制经典的二维图表外,matplotlib还支持绘制三维图表,通过mplot3d工具可以实现,只需要在axes对象中指定projection参数为3 ...

  4. 【原创】用Matplotlib绘制的图表,真的是太惊艳了!!

    当我们谈论Python中的数据可视化,Matplotlib是一个不可或缺的库.它强大的功能和灵活性使我们能够以各种方式轻松地呈现数据.然而,有时候,我们可能会忽视Matplotlib在创建视觉上令人惊 ...

  5. [转载] 在Python中使用Matplotlib绘制常见图表

    参考链接: Python | 使用openpyxl模块在Excel工作表中绘制图表 3 Matplotlib 是一个非常强大的 Python 画图工具,通过绘制线图.散点图.等高线图.条形图.柱状图. ...

  6. 使用matplotlib绘制简单图表第二课

    一.绘制堆积面积图 1.使用 stackplot()绘制堆积面积图 使用pyplot的stackplot0函数可以快速绘制堆积面积图,stackplot(0 函数的语法格式如下所示: stackplo ...

  7. Python可视化之Matplotlib绘制高级图形对数图、频谱图、矢量场流线图、互关图

    1.对数图 便于观察图形之间变化的情况 from matplotlib import pyplot as plt import numpy as np x = np.linspace(1,100) y ...

  8. MATLAB05:绘制高级图表

    一.二维线图 1.对数折线图 示例: x = logspace(-1,1,100); y = x.^2;subplot(2,2,1); plot(x,y); title('Plot');subplot ...

  9. python matplotlib绘制 3D图像专题 (三维柱状图、曲面图、散点图、曲线图合集)

    python matplotlib 绘制3D图表 文章目录 1. 绘制3D柱状图 2. 绘制3D曲面图 ① 示例1 ② 示例2 3.绘制3D散点图 4. 绘制3D曲线图       ʚʕ̯•͡˔•̯᷅ ...

最新文章

  1. 安卓Webview缓存网页数据(无网络正常显示)
  2. 原理剖析-Netty之服务端启动工作原理分析(上)
  3. OpenCASCADE:读STEP
  4. ubuntu19.10下面的redis的启动与关闭
  5. Mysql数据库的分离和附加转
  6. 信源压缩编码 编程c语言,霍夫曼信源编码实验报告.docx
  7. c++指定在某一线程运行_iPhone11升级iOS14运行速度测试:结果有点小惊喜
  8. 苹果无人车或明年发布:被奔驰、比亚迪拒绝后,大众面包车终成接盘侠
  9. 【重大改革】吴恩达:孩子会识字后立马教她Python!
  10. piggy back是什么意思?
  11. mysql 拼接字符串查询
  12. BigGAN进化出最强形态BigBiGAN:重回表示学习,GAN之父点赞
  13. 关于计算机文献检索报告,计算机专业文献检索论文参考选题.doc
  14. Java——事故应急
  15. 一文理清集成运算放大器 ---- 总结篇
  16. 使用x264压制视频简介
  17. 自学Java软件编程需要哪些基础?
  18. vue 生命周期activated与created使用
  19. 微型计算机系统核心hhg,计算机应用基础测试题1
  20. Enovia 用户操作手册

热门文章

  1. 2012意大利之行3:罗马的路和车
  2. Apriori算法的介绍
  3. IC授权卡和复制卡的区别_北京居住证跟居住卡的区别
  4. 用Win10中自带的CHKDSK来扫描和修复硬盘
  5. 【ae】关键帧与定格关键帧
  6. 【安卓】处理Android Studio中文字体为繁体字
  7. AD布线布局和抗干扰
  8. java hypot_Java Math类静态double hypot(double d1,double d2)与示例
  9. 操作系统简史(1)东方会有新的操作系统诞生吗?让历史告诉未来
  10. mysql组复制(MGR)——背景