Python其实很简单第二十五章数据分析的图形化
用数据表达信息是非常准确的,但用图形去表达信息更一目了然。Python有许多用于数据图形化的工具,可以帮助我们快速的将数据用图形表达出来。
25.1数据图形化工具Jupyter Notebook
Jupyter Notebook是一种Web应用,可以在网页页面中直接编写代码和运行代码,代码的运行结果也会直接在代码块下显示。如在编程过程中需要编写说明文档,可在同一个页面中直接编写,便于作及时的说明和解释。它生成的.jpynb文件可以发布到网上供所有人查阅。
如果安装了Anaconda,就不需要额外安装Jupyter Notebook。前面在第十八章中已经介绍过Anaconda的安装方法,这里假设你已经在计算机上安装了Anaconda。
可以在Anaconda的目录下找到Jupyter Notebook或者在搜索框中搜索"Jupyter Notebook"(不限字母大小写),然后运行即可出现如下界面:
接下来,单击右上角的New按钮,在下拉列表中选择Python3,此时会出现如下界面:
可以在In [ ]:后面的代码框输入代码,点击运行按钮运行,其他操作都非常容易掌握。
25.2 图表的基本组成元素
一个标准的可视化图表如下图所示,该表包含了一个图表中的基本组成元素。
25.3 创建画布
在"In [ ]:"后面的代码框输入如下代码(代码24-3):
import matplotlib.pyplot as plt
#导入matplotlib库中的pyplot并命名别名为plt
%matplotlib inline
#为了使图表在Jupyter Notebook中输出
plt.rcParams["font.sans-serif"]="SimHei"
#指定标签的字体,但要保证Anaconda安装了该字体
plt.rcParams["axes.unicode_minus"]=False
#解决负号显示出错的问题
%config InlineBackend.figure="svg"
#设置显示格式为矢量图,可以提高清晰度
fig=plt.figure()
#创建画布
plt.figure(figsize=(8,6))
#设置画布的宽和高
plt.show()
#显示图片
点击"运行"按钮,即可创建一个宽为8,高为6(单位为英寸)的画布,但此时的画布并看不到,因为它是空白的。
如果在plt.show()前面再添加如下几行代码:
plt.xlim(0,20)
plt.ylim(0,10)
plt.xlim()和plt.ylim()函数可以设置坐标轴的最大刻度值。若不设置,坐标轴默认最大刻度值为1。
运行后得到如下图表:
25.4 建立坐标系
1、单坐标系,可运行如下代码:
import matplotlib.pyplot as plt
%matplotlib inline
plt.rcParams["font.sans-serif"]="SimHei"
plt.rcParams["axes.unicode_minus"]=False
%config InlineBackend.figure="svg"
fig=plt.figure()
ax1=fig.add_subplot(1,1,1)
可以得到如下坐标系:
2、也可以在一张画布上绘制多个坐标系,输入如下代码,可以绘制出4个坐标系:
import matplotlib.pyplot as plt
%matplotlib inline
plt.rcParams["font.sans-serif"]="SimHei"
plt.rcParams["axes.unicode_minus"]=False
%config InlineBackend.figure="svg"
fig=plt.figure()
ax1=fig.add_subplot(2,2,1)
ax2=fig.add_subplot(2,2,2)
ax3=fig.add_subplot(2,2,3)
ax4=fig.add_subplot(2,2,4)
运行后得到如下坐标系:
25.5 设置其他图表格式
现采用如下数据("d:/sell.txt"):
month,amount
1,68980
2,78875
3,81400
4,70624
6,65562
6,94603
7,49705
8,76060
9,83485
10,96033
11,85446
12,84685
用如下实例进行详解,代码如下(不能用注释解释的部分,请按照编号参考后面的详解):
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
%matplotlib inline
plt.rcParams["font.sans-serif"]="SimHei"
plt.rcParams["axes.unicode_minus"]=False
%config InlineBackend.figure="svg"
fig=plt.figure()
data = pd.read_csv("d:/sell.txt") # [1]
x=data["month"] # [2]
y=data["amount"]
plt.xlabel("月份") #设置横轴标题
plt.ylabel("销售量",labelpad=10) #设置纵轴标题,labelpad为ylabel到y轴的距离
plt.grid(b="True",linestyle="dashed",linewidth=1) # [3]
plt.xticks(np.arange(13),["","1月","2月","3月","4月","5月","6月","7月","8月","9月","10月","11月","12月"]) #[4]
plt.plot(x,y,label="折线图") #画出折线图,并标出图例
plt.bar(x,y,label="柱状图") #画出柱状图,并标出图例
plt.legend(ncol=2) # 2个图例都显示
plt.title(label="大漠公司1—12月销售量统计") #设置图表标题
运行后得到的图表如下:
关于上面程序的详解:
【1】pd.read_csv()方法可以读取文本文件,既可以读取.txt文件,也可以读取.csv文件。
.txt文件大家都非常熟悉,一般用记事本程序编辑。.csv文件是一种特殊的纯文本文件,可以用Excel程序编辑,文件保存时选择.csv格式即可。.csv文件在Excel中编辑时和普通的.xlsx文件区别,都是按照单元格编辑的,保存为.csv文件后,在记事本中打开,会发现行用换行符区分,列用逗号隔开。
从上例我们已经知道,普通的.txt文件也能被pd.read_csv()方法读取,所以,直接使用用行和逗号分隔的数据更为方便。
【2】d:/sell.txt被pd.read_csv()方法读取后,是一个DataFrame类型的数据集,共有两个列,即["month"]和["amount"]。
【3】plt.grid()用于设置图表的网格线。
b="True"用来启用网格线。
如果仅开启x轴的网格线,可用参数axis="x";如果仅开启y轴的网格线,可用参数axis="y";若不设置axis,则同时开启x和y轴的网格线。
linestyle用于设置线型,如linestyle="dashed",表示设置为虚线。
linewidth=1表示线宽的值。
【4】plt.xticks用于设置横坐标轴的刻度,格式如plt.xticks(ticks,labels),其中ticks表示刻度值,labels表示该刻度处对应的标签,都为列表类型。
因为在前面的语句plt.xlabel("月份")中没有设置labelpad参数,所以显示的月份是从0刻度开始的,所以ticks的值设为np.arange(13),即刻度为0~12,相应的标签为空字符、"1月"~"12月"。
关注大漠孤驼的编程苦旅,告诉你不一样的Python