可视化图表类型
可视化图表类型:趋势,分布,构成,比较,练习
趋势:表示数据是如何随着时间而发生变化的
通常,用表示折线图和柱状图表示
例如,比较每个国家的GDP增长情况;
展示某公司股票价格的波动情况
分布:当展示数据的分布规律时,会用散点图来展示不同分布特征。
通过考察散点图中点的分布情况,来总结数据的分布模式或判断两个数据之间是否存在某种关联。
例如,研究身高和体重的关系
构成:用于表示数据中每个部分占总体的比例情况,一般用饼图表示
如果要展示一段时间内的占比情况,更适合用百分比堆积柱状图来展示
例如,一个公司,不同部门在一年内销量额占比情况。
比较:该类型用于数据在某维度上的比较,通常会通过簇形柱状图和并列子图来反映对比数据间的关系。
例如,一段时间内,图书馆各楼的销量情况
联系:该类型主要用于衡量两种维度数据之间的关系,即观察其中一类数据的大小是否随着另一类数据的大小有规律地变化。通常,这两类数据的统计单位不一致,且数值相差悬殊。
一般情况下,我们会使用双y轴叠加图来展示。
例如,一个公司在过去几年的销售额和利润情况。
绘图工具
matplotlib图像的构成
matplotlib是Python的基本绘图模块,包含了大量的工具。
我们可以使用matplotlib创建各种图像,包括简单的折线图、柱状图等,甚至是复杂的三维图像。
matplotlib模块里有一个非常方便的子模块:pyplot
,我们之后要绘制的图像主要都是依赖于这个子模块
matplotlib图表的组成元素包括:画布(Figure)、坐标图形(Axes)、图像标题(Title)
安装的导入matplotlib模块
在终端输入pip install matplotlib
# 使用import导入matplotlib模块下的pyplot子模块
import matplotlib.pyplot as plt
设置matplotlib字体
导入模块后,就可以开始用matplotlib绘图了,但在此之前,我们还需要学习如何设置中文字体。
这是因为matplotlib默认不支持中文字符,所以如果在画图中用到中文字符,就需要通过设置中文字体,来避免出现如图所示的乱码。
import matplotlib.pyplot as plt
# 设置中文字体
plt.reParams["font.sans-serif"] = "SimHei"
在本地运行时,如果是Windows系统,可以把字体设置成SimHei
;
如果是macOS系统,可以把字体设置为 Arial Unicode MS
。
设置不同的字体
除了Arial Unicode MS字体和SimHei字体,还有多种字体可以选择和设置。
例如需要设置宋体字体,设置方法:
plt.rcParams["font.sans-serif"] = "SimSun"
创建画布
使用figure()函数可以创建画布。
例如:
plt.figure(figsize=(4,3),facecolor='blue')
创建了一个新画布,画布的宽为4英寸,高为3英寸,画布的背景颜色为蓝色。
figure()
函数的常用参数有(均为非必选参数):
figsize
:指定figure的宽和高,单位为英寸;
facecolor
:背景颜色
edgecolor
:边框颜色
frameon
:是否显示边框
import matplotlib.pyplot as plt
plt.rcParams["font.sans-serif"] = "Arial Unicode MS"
# 使用plt.figure()函数创建画布
# 添加参数figsize设置画布大小为(4,5)
# 添加参数facecolor设置画布颜色为'pink'
plt.figure(figsize=(4,5),facecolor='pink')
每当完成绘图后,如果要展现绘图结果,需要使用plt.show()
函数。
绘制图像
折线图
折线图强调数据随时间的变化规律或者趋势,非常适用于展示在相等时间间隔下数据的趋势
在matplotlib.pyplot
模块中,可以使用plt.plot()
函数绘制折线图。
制作折线图表示:
2020年1月22日至2020年7月27日病毒死亡率走势
import matplotlib.pyplot as plt
import pandas as pd
data = pd.read_csv(r"C:\Users\17585\Desktop\virus.csv")
plt.rcParams["font.sans-serif"] = "SimHei"
deathRate = data["Deaths"]/data["Confirmed"]
data["Date"] = pd.to_datetime(data["Date"])
#绘制折线图
plt.plot(data["Date"],deathRate,color="orchid",marker="o",label="每月总销量")
# 设置x轴标题
plt.xlabel("日期")
# 设置Y轴标题
plt.ylabel("死亡率")
# 设置图标标题
plt.title("2020年1月22日至2020年7月27日病毒死亡率走势")
# 显示图例
plt.legend()
# 显示图像
plt.show()
柱状图
柱状图用于展示一段时间内的数据变化或展示各项数据之间的比较情况。
用柱状图表示2012年欧洲杯各球队射正率
import matplotlib.pyplot as plt
import pandas as pd
df = pd.read_csv(r"C:\Users\17585\Desktop\Euro2012.csv")
plt.rcParams["font.sans-serif"] = "SimHei"
# 绘制柱状图
plt.bar(df["Team"],df["Shooting Accuracy"],color="DeepPink",width=0.4,label="射正率")
# 添加X轴标题
plt.xlabel("队名")
# 添加Y轴标题
plt.ylabel("射正率")
# 添加图标标题
plt.title("2012年欧洲杯各球队射正率柱状图")
# 显示图例
plt.legend()
# 显示图像
plt.show()
散点图
散点图是比较常见的图表类型之一,通常用于显示两个数据间的关联和比较数值。
散点图使用一系列的散点来展示数值的分布。
散点图可以提供以下关键信息:
- 是否存在关联趋势;
- 如果存在关联趋势,那么是线性的还是非线性的;
- 是否存在离群值,也就是在数据中与其它数值相比差异较大的数值。
用散点图表示广告费和销量之间的关系
import matplotlib.pyplot as plt
import pandas as pd
data = pd.read_csv(r"C:\Users\17585\Desktop\销售和广告费的关系。散点图.csv")
plt.rcParams["font.sans-serif"] = "SimHei"
plt.figure(figsize=(4,5),facecolor='pink')
# 绘制散点图
plt.scatter(data["ads_fee"],data["sales"],color="green",label="广告效用")
# 添加X轴标题
plt.xlabel("广告费用")
# 添加Y轴标题
plt.ylabel("销量")
# 添加图像标题
plt.title("广告费和销售的关系")
plt.legend()
# 展示图像
plt.show()
双Y轴叠加图
双y轴叠加图其实就是在基础图像上,做了一些叠加组合,来进一步展示出更多的信息。
例如,为了要对比两种单位不同或者数值相差较大的数据时,我们需要将两个不同的图像,通过共享一个x轴和两个y轴,绘制在一张图中。
用双Y轴叠加图,分别添加通货膨胀率和价格水平两个Y轴
import matplotlib.pyplot as plt
import pandas as pd
data = pd.read_csv(r"C:\Users\17585\Desktop\bank.csv")
# 设置中文字体
plt.rcParams["font.sans-serif"] = "SimHei"
# 绘制柱状图
plt.bar(data["年份"],data["通货膨胀率"],color="LightPink",label = "货币水平")
# 设置X轴标题
plt.xlabel("年份")
# 设置Y轴标题
plt.ylabel("价格水平")
# 将图例放在左上角
plt.legend(loc="upper left")
# 添加另一个Y轴
plt.twinx()
# 绘制折线图
plt.plot(data["年份"],data["通货膨胀率"],color="DeepPink",marker="s",label="通货膨胀率")
# 添加第二个Y轴
plt.ylabel("通货膨胀率")
# 显示图例
plt.legend()
# 显示图像
plt.show()
调整图例位置
为了解决双y轴叠加图的图例重叠显示的情况,我们可以自己选择柱状图和折线图的图例位置。
只需在调用plt.legend()
函数时,将图中的位置作为字符串赋值给loc
参数,然后传入到该函数中即可。
簇行柱状图
簇形柱状图用来比较某一维度上的多个数据。
比如,每一层楼的每月销量,就是同一维度上的多个数据。
要绘制簇形柱状图,只需要对一个DataFrame对象,使用pandas模块中的plot.bar()
函数即可。
用簇行柱状图表示2019年8月至2020年7月书店每月各楼销量走势
import matplotlib.pyplot as plt
import pandas as pd
data = pd.read_csv(r"C:\Users\17585\Desktop\图书馆.csv",encoding="gbk")
plt.rcParams["font.sans-serif"] = "SimHei"
data.plot.bar("month",["一楼","二楼","三楼"])
plt.xlabel("月份")
plt.ylabel("销量")
plt.title("2019年8月至2020年7月书店每月各楼销量走势")
plt.show()
百分比堆积柱状图
百分比堆积柱状图显示单个项目与整体之间的关系,它比较各个类别的每个数值所占总数值的比例。
在绘制百分比堆积柱状图时,x轴一般为类别型数据,y轴为数值型,所以要先求和得到每个类别的总和数值,并计算占比后,再绘制图像。
将pandas模块中的簇形柱状图绘制函数plot.bar()
函数的参数stacked
设置为True
,就可以绘制堆积柱状图。
stacked=True
会使DataFrame中每一行的值垂直堆叠放置,形成堆积柱状图。
用百分比堆积图绘制2019年8月至2020年7月书店每月销量占比
import matplotlib.pyplot as plt
import pandas as pd
data = pd.read_csv(r"C:\Users\17585\Desktop\图书馆.csv",encoding="gbk")
plt.rcParams["font.sans-serif"] = "SimHei"
data.plot.bar("month",["一楼","二楼","三楼"],stacked=True)
plt.xlabel("月份")
plt.ylabel("占比")
plt.title("2019年8月至2020年7月书店每月销量占比")
plt.show()