- ubuntu12.04环境下使用kvm ioctl接口实现最简单的虚拟机
- Ubuntu 通过无线网络安装Ubuntu Server启动系统后连接无线网络的方法
- 在Ubuntu上搭建网桥的方法
- ubuntu 虚拟机上网方式及相关配置详解
CFSDN坚持开源创造价值,我们致力于搭建一个资源共享平台,让每一个IT人在这里找到属于你的精彩世界.
这篇CFSDN的博客文章Python数据可视化教程之Matplotlib实现各种图表实例由作者收集整理,如果你对这篇文章有兴趣,记得点赞哟.
前言 。
数据分析就是将数据以各种图表的形式展现给领导,供领导做决策用,因此熟练掌握饼图、柱状图、线图等图表制作是一个数据分析师必备的技能。python有两个比较出色的图表制作框架,分别是matplotlib和pyechart。本文主要讲述使用matplotlib制作各种数据图表.
matplotlib是最流行的用于绘制2d数据图表的python库,能够在各种平台上使用,可以绘制散点图、柱状图、饼图等.
1、柱状图 。
是一种以长方形或长方体的高度为变量的表达图形的统计报告图,由一系列高度不等的纵向条纹表示数据分布的情况,用来比较两个或以上的价值(不同时间或者不同条件),只有一个变量,通常利用于较小的数据集分析。柱状图可以用来比较数据之间的多少,可以用来观察某一事件的变化趋势,柱状图亦可横向排列,或用多维方式表达.
实现代码:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
|
# 导入绘图模块
import
matplotlib.pyplot as plt
# 构建数据
sales
=
[
7125
,
12753
,
13143
,
8635
]
# 中文乱码的处理,rcparams也可以用于设置图的分辨率,大小等信息
plt.rcparams[
'font.sans-serif'
]
=
[
'simhei'
]
plt.rcparams[
'axes.unicode_minus'
]
=
false
# 绘图,第一个参数是x轴的数据,第二个参数是y轴的数据,第三个参数是柱子的大小,默认值是1(值在0到1之间),color是柱子的颜色,alpha是柱子的透明度
plt.bar(
range
(
4
), sales,
0.4
,color
=
'r'
, alpha
=
0.8
)
# 添加轴标签
plt.ylabel(
'销量'
)
# 添加标题
plt.title(
'水果2018年度销量'
)
# 添加刻度标签
plt.xticks(
range
(
4
),[
'苹果'
,
'香蕉'
,
'梨'
,
'猕猴桃'
])
# 设置y轴的刻度范围
plt.ylim([
5000
,
15000
])
# 为每个条形图添加数值标签
for
x,y
in
enumerate
(sales):
plt.text(x,y
+
100
,
'%s'
%
y,ha
=
'center'
)
# 显示图形
plt.show()
|
效果图:
只需绘制柱状图的函数bar()改成barh()就可以将柱状图长方形或长方体从垂直方向变为水平方向.
实现代码:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
|
# 导入绘图模块
import
matplotlib.pyplot as plt
# 构建数据
sales
=
[
7125
,
12753
,
13143
,
8635
]
# 中文乱码的处理
plt.rcparams[
'font.sans-serif'
]
=
[
'simhei'
]
plt.rcparams[
'axes.unicode_minus'
]
=
false
x
=
[
'苹果'
,
'香蕉'
,
'梨'
,
'猕猴桃'
]
# 绘图
plt.barh(
range
(
4
), sales,
0.4
,color
=
'r'
, alpha
=
0.8
)
# 添加轴标签
plt.ylabel(
'销量'
)
# 添加标题
plt.title(
'水果2018年度销量'
)
# 添加刻度标签
plt.yticks(
range
(
4
),[
'苹果'
,
'香蕉'
,
'梨'
,
'猕猴桃'
])
# 设置y轴的刻度范围
plt.xlim([
5000
,
15000
])
# 为每个条形图添加数值标签
for
x,y
in
enumerate
(sales):
plt.text(y
+
0.2
,x,
'%s'
%
y,va
=
'center'
)
# 显示图形
plt.show()
|
效果图:
除了bar()函数变成barh()之外。还有其他几个地方要做修改,在给每个条形图添加数值标签时,将ha='center'改为va='center',将添加x轴标签的方法从xlabel改为ylabel.
柱状图和折线图混合使用 。
柱状图可以和折线图混合使用,用来表示某一个数据的变化趋势,下面是例子的柱状图表示水果的年度销量,折线图表示水果1月份的销量.
代码:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
|
# 导入绘图模块
import
matplotlib.pyplot as plt
jan_sales
=
[
3010
,
4029
,
5021
,
3056
]
# 构建数据
sales
=
[
7125
,
12753
,
13143
,
8635
]
# 中文乱码的处理
plt.rcparams[
'font.sans-serif'
]
=
[
'simhei'
]
plt.rcparams[
'axes.unicode_minus'
]
=
false
x
=
[
'苹果'
,
'香蕉'
,
'梨'
,
'猕猴桃'
]
plt.plot(x,jan_sales,
'r'
)
# 折线 1 x 2 y 3 color
plt.plot(x,jan_sales,
'g'
,lw
=
5
)
# 4 line w
# 绘图
plt.bar(
range
(
4
), sales,
0.4
,color
=
'b'
, alpha
=
0.8
)
# 添加轴标签
plt.ylabel(
'销量'
)
# 添加标题
plt.title(
'水果2018年度销量'
)
# 添加刻度标签
plt.xticks(
range
(
4
),[
'苹果'
,
'香蕉'
,
'梨'
,
'猕猴桃'
])
# 设置y轴的刻度范围
plt.ylim([
2000
,
15000
])
# 为每个条形图添加数值标签
for
x,y
in
enumerate
(sales):
plt.text(x,y
+
100
,
'%s'
%
y,ha
=
'center'
)
# 显示图形
plt.show()
|
效果图:
2、折线图 。
折线图主要用于表示数据变化的趋势。折线图是直线将不同的点连接起来.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
|
# 导入绘图模块
import
matplotlib.pyplot as plt
#构建数据
jan_sales
=
[
3010
,
4029
,
5021
,
3056
]
# 中文乱码的处理
plt.rcparams[
'font.sans-serif'
]
=
[
'simhei'
]
plt.rcparams[
'axes.unicode_minus'
]
=
false
x
=
[
'苹果'
,
'香蕉'
,
'梨'
,
'猕猴桃'
]
#第一个参数是x轴,第二参数时y轴数据,第三个参数是线的颜色,第二个参数是线条的粗细
plt.plot(x,jan_sales,
'r'
,lw
=
5
)
# 4 line w
# 添加标题
plt.title(
'水果2018年度1月份销量图'
)
plt.ylim([
2000
,
15000
])
# 为每个点添加数值标签
for
x,y
in
enumerate
(jan_sales):
plt.text(x,y
+
100
,
'%s'
%
y,ha
=
'center'
)
# 显示图形
plt.show()
|
效果图:
折线图通过调用plot()方法绘制.
3、饼图 。
饼图主要是用来表示数据的占比,给人一眼就可以看出数据的占比大小。饼图使用pie()函数绘制.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
|
import
matplotlib.pyplot as plt
# 设置绘图的主题风格(不妨使用r中的ggplot分隔)
plt.style.use(
'ggplot'
)
# 构造数据
edu
=
[
0.2515
,
0.3724
,
0.3336
,
0.0368
,
0.0057
]
labels
=
[
'苹果'
,
'香蕉'
,
'梨'
,
'猕猴桃'
,
'桔子'
]
explode
=
[
0
,
0.1
,
0
,
0
,
0
]
# 用于突出显示大专学历人群
colors
=
[
'#feb748'
,
'#edd25d'
,
'#fe4f54'
,
'#51b4ff'
,
'#dd5555'
] # 自定义颜色
# 中文乱码和坐标轴负号的处理
plt.rcparams[
'font.sans-serif'
]
=
[
'simhei'
]
plt.rcparams[
'axes.unicode_minus'
]
=
false
# 将横、纵坐标轴标准化处理,保证饼图是一个正圆,否则为椭圆
plt.axes(aspect
=
'equal'
)
# 控制x轴和y轴的范围
plt.xlim(
0
,
4
)
plt.ylim(
0
,
4
)
# 绘制饼图
plt.pie(x
=
edu,
# 绘图数据
explode
=
explode,
# 突出显示香蕉人群
labels
=
labels,
# 添加水果销量水平标签
colors
=
colors,
# 设置饼图的自定义填充色
autopct
=
'%.1f%%'
,
# 设置百分比的格式,这里保留一位小数
pctdistance
=
0.8
,
# 设置百分比标签与圆心的距离
labeldistance
=
1.15
,
# 设置销量水平标签与圆心的距离
startangle
=
180
,
# 设置饼图的初始角度
radius
=
1.5
,
# 设置饼图的半径
counterclock
=
false,
# 是否逆时针,这里设置为顺时针方向
wedgeprops
=
{
'linewidth'
:
1.5
,
'edgecolor'
:
'green'
},
# 设置饼图内外边界的属性值
textprops
=
{
'fontsize'
:
12
,
'color'
:
'k'
},
# 设置文本标签的属性值
center
=
(
1.8
,
1.8
),
# 设置饼图的原点
frame
=
1
)
# 是否显示饼图的图框,这里设置显示
# 删除x轴和y轴的刻度
plt.xticks(())
plt.yticks(())
# 添加图标题
plt.title(
'2018年水果销量分析'
)
# 显示图形
plt.show()
|
效果图:
简单介绍下pie函数参数:
4、散点图 。
散点图主要的作用是判断两个变量之间关系的强弱或者是否存在关系.
散点图由scatter()方法绘制.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
|
import
numpy as np
import
matplotlib.pyplot as plt
# 数据个数
n
=
50
# 均值为0, 方差为1的随机数
x
=
np.random.normal(
0
,
1
, n)
y
=
np.random.normal(
0
,
1
, n)
# 计算颜色值
color
=
np.arctan2(y, x)
# 绘制散点图
plt.scatter(x, y, s
=
75
, c
=
color, alpha
=
0.5
)
# 设置坐标轴范围
plt.xlim((
-
1.5
,
1.5
))
plt.ylim((
-
1.5
,
1.5
))
# 不显示坐标轴的值
plt.xticks(([
-
1
,
0
,
1
,
2
,
3
,
4
]))
plt.yticks(([
-
1
,
0
,
1
,
2
,
3
,
4
]))
plt.show()
|
效果图:
5、箱线图 。
箱线图一般用来展现数据大小、占比、趋势等等的呈现,其包含一些统计学的均值、分位数、极值等等统计量,因此,该图信息量较大,不仅能够分析不同类别数据平均水平差异(需在箱线图中加入均值点),还能揭示数据间离散程度、异常值、分布差异等等.
使用boxplot()方法绘制.
1
2
3
4
5
6
7
8
|
import
numpy as np
import
matplotlib.pyplot as plt
import
pandas as pd
np.random.seed(
2
)
#设置随机种子
df
=
pd.dataframe(np.random.rand(
5
,
4
),
columns
=
[
'a'
,
'b'
,
'c'
,
'd'
])
#先生成0-1之间的5*4维度数据,再装入4列dataframe中
df.boxplot()
#也可用plot.box()
plt.show()
|
效果图:
6、雷达图 。
雷达图可以用来显示一个周期数值的变化,也可以用来展示对个对象/维度之间的关系 。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
|
import
numpy as np
import
matplotlib.pyplot as plt
#标签
labels
=
np.array([
'语文'
,
'数学'
,
'英语'
,
'生物'
,
'物理'
,
'化学'
])
#数据个数
datalenth
=
6
#数据
data
=
np.array([
7
,
4
,
3
,
6
,
4
,
8
])
angles
=
np.linspace(
0
,
2
*
np.pi, datalenth, endpoint
=
false)
data
=
np.concatenate((data, [data[
0
]]))
# 闭合
angles
=
np.concatenate((angles, [angles[
0
]]))
# 闭合
fig
=
plt.figure()
ax
=
fig.add_subplot(
111
, polar
=
true)
# polar参数!!
ax.plot(angles, data,
'bo-'
, linewidth
=
2
)
# 画线
ax.fill(angles, data, facecolor
=
'r'
, alpha
=
0.25
)
# 填充
ax.set_thetagrids(angles
*
180
/
np.pi, labels, fontproperties
=
"simhei"
)
ax.set_title(
"matplotlib雷达图"
, va
=
'bottom'
, fontproperties
=
"simhei"
)
ax.set_rlim(
0
,
10
)
ax.grid(true)
plt.show()
|
效果图:
7、气泡图 。
气泡图用于判断3个变量之间是否存在某种关系。它跟散点图有点类似,只不过气泡图以气泡大小作为新的维度 。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
|
import
pandas as pd
import
matplotlib.pyplot as plt
import
pandas as pd
d
=
{
"时间"
:pd.series([
2006
,
2007
,
2008
,
2009
,
2010
]),
"数量"
:pd.series([
10
,
200
,
120
,
150
,
300
]),
"大小"
:pd.series([
50
,
130
,
40
,
50
,
160
]),
"分类"
:pd.series([
1
,
2
,
0
,
1
,
2
]),
"判断"
:pd.series([true,true,true,true,true])}
df
=
pd.dataframe(d)
#先定义气泡大小,rank 函数将大小列进行大小分配,越大的值分配结果也越高
#n 为倍数,用来调节气泡的大小,且看后头
size
=
df[
'大小'
].rank()
n
=
20
#定义一个字典,将颜色跟对应的分类进行绑定
color
=
{
0
:
'red'
,
1
:
'blue'
,
2
:
'orange'
}
#增加color的参数,用列表解析式将data分类中的每个数据的数字映射到前面color的颜色中
plt.scatter(df[
'数量'
],df[
'大小'
],color
=
[color[i]
for
i
in
df[
'分类'
]],s
=
size
*
n,alpha
=
0.6
)
plt.show()
|
效果图:
气泡图用也是scatter方法绘制,和散点图一样。差别在于点的大小不一样,散点图的点都是一样的,而气泡图点的大小不一样.
以上就是柱状图、散点图、气泡图、折线图的实现方式。希望给大伙带来帮助.
总结 。
以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流,谢谢大家对我的支持.
原文链接:https://www.cnblogs.com/airnew/p/10262686.html 。
最后此篇关于Python数据可视化教程之Matplotlib实现各种图表实例的文章就讲到这里了,如果你想了解更多关于Python数据可视化教程之Matplotlib实现各种图表实例的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。
有没有一种方法可以使用标准类型构造函数(例如 int、set、dict、list、tuple 等)以用户定义的方式将用户定义类的实例强制转换为其中一种类型?例如 class Example:
我知道这个问题在Stackoverflow中有很多问题,但是即使有很多答案,这些答案也帮不了我什么,也没有找到答案。 在我的WebAPP中,它可以正常工作,但是当我将其转换为API时,它失败了(主题标
这个问题已经有答案了: Why does the ternary operator unexpectedly cast integers? (3 个回答) 已关闭 9 年前。 最近遇到一个Java的陷
我尝试使用 FirebaseApp.configure() 配置 Firebase,但遇到以下崩溃: *** Terminating app due to uncaught exception 'c
我有一个自连接员工实体类,其中包含与其自身相关的 id、name 和 ref 列。我想创建它的新实例并将其保存到数据库。 首先我创建了一个 Employee 类的实例并将其命名为 manager。然后
我有一个用于添加新公寓的表单,在该表单中我有一个下拉列表,用户可以在其中选择负责的人员。 显然,当您从下拉列表中选择并尝试保存公寓时,我的应用程序认为该人已被修改。它给了我下面的错误,指示我应该首先保
从 Visualforce 页面,我需要检索我们组织的 salesforce 实例的 URL,而不是 Visual Force URL。 例如我需要https://cs1.salesforce.com
我遇到了一些可能的问题答案,但这是关于从 Hibernate 3.4.0GA 升级到 Hibernate 4.1.8 的问题。所以这曾经在以前的版本下工作,我已经四处搜索了为什么它在这个新版本中出现了
似乎一遍又一遍地问这个问题,我仍然找不到解决我问题的答案。我在下面有一个域模型。每个新创建或更新的“安全用户”都需要我确保其具有配置文件,如果没有,则创建一个新的配置文件并分配给它。 配置文件的要求相
我很难调试为什么 JPA 不级联我的 @ManyToMany 关系。我发现的所有答案都与缺少级联语句有关。但我确实拥有它们并且仍然得到: Caused by: org.hibernate.Transi
Play 服务 API 表明有一个叫做 Instance ID 的东西 但是,在 Android Studio 中包含以下内容后,我无法导入 InstanceID 类 compile "com.goo
我正在使用 Seam 框架。我有 2 个实体: 请求.java @Entity @Table(name = "SRV_REQUEST") public class Request { private
This question处理构建一个适当的Monad来自单子(monad)的实例,但仅在某些约束下 - 例如Set .诀窍是将其包装成 ContT ,它将约束推迟到包装/展开其值。 现在我想对 Ap
我正在尝试执行此查询: StringBuffer sb = new StringBuffer(); sb.append("select p from PointsEntity p " + "where
我试图了解是否可以更改我的 hibernate 配置并使用单个 MySQL 实例(而不是我当前拥有的多个 MySQL 实例): 我有一个使用 hibernate 的 Java 应用程序,与 2 个模式
我有一个选项卡滑动布局,其中包括四个选项卡,每个选项卡都有自己的布局和 fragment ,在我的主要 Activity 布局中,viewpager 参与更改选项卡。特定 View (选项卡)在应用程
我看到很多帖子声称他们正在运行 MySql 的 RDS 实例,但无法连接到该实例,但我没有运行 RDS。 我使用 EC2 实例来托管我的 WordPress 博客,该博客是使用 Web 平台安装程序安
因为我在我的 ec-2 实例上的 python 虚拟环境中运行应用程序( Airflow ),并且我想在同一个 ec2 实例上的默认 python 环境中运行命令,所以我认为 ssh 到我自己的实例更
这个问题已经有答案了: How to fix the Hibernate "object references an unsaved transient instance - save the tra
例子: run APP1 .. ... run APP1 ... run APP2 如何在 APP2 中对 Vue 说我需要调用 APP1?
我是一名优秀的程序员,十分优秀!