人生苦短,我用 Pythonhtml
前文传送门:python
小白学 Python 数据分析(2):Pandas (一)概述github
小白学 Python 数据分析(3):Pandas (二)数据结构 Seriesapi
小白学 Python 数据分析(4):Pandas (三)数据结构 DataFrame数据结构
小白学 Python 数据分析(5):Pandas (四)基础操做(1)查看数据echarts
小白学 Python 数据分析(6):Pandas (五)基础操做(2)数据选择dom
小白学 Python 数据分析(7):Pandas (六)数据导入spa
小白学 Python 数据分析(8):Pandas (七)数据预处理.net
小白学 Python 数据分析(9):Pandas (八)数据预处理(2)
小白学 Python 数据分析(10):Pandas (九)数据运算
小白学 Python 数据分析(11):Pandas (十)数据分组
小白学 Python 数据分析(12):Pandas (十一)数据透视表(pivot_table)
小白学 Python 数据分析(13):Pandas (十二)数据表拼接
小白学 Python 数据分析(14):Pandas (十三)数据导出
小白学 Python 数据分析(16):Matplotlib(一)坐标系
小白学 Python 数据分析(17):Matplotlib(二)基础操做
小白学 Python 数据分析(18):Matplotlib(三)经常使用图表(上)
上一篇咱们介绍了常见的折线图和柱状图,本篇咱们接着看其余经常使用的图形。
散点图常常用来表示数据之间的关系,使用的是 plt 库中的 scatter()
方法,仍是先看下 scatter()
的语法,来自官方文档:matplotlib.org/api/_as_gen… :
matplotlib.pyplot.scatter(x, y, s=None, c=None, marker=None, cmap=None, norm=None, vmin=None, vmax=None, alpha=None, linewidths=None, verts=<deprecated parameter>, edgecolors=None, *, plotnonfinite=False, data=None, **kwargs)
复制代码
前面介绍过的参数这里再也不多说,说点散点图特有的参数:
其实散点图的经常使用参数和以前的折线图柱状图都差很少,还有一些没介绍的高阶参数能够参考官方文档,主要是用来作一些比较骚的操做的,能够用来自定义颜色的渐变。
看个简单的示例,数据仍是使用前文的数据:
import matplotlib.pyplot as plt
import numpy as np
# 处理中文乱码
plt.rcParams['font.sans-serif']=['SimHei']
x_data = np.array([2011,2012,2013,2014,2015,2016,2017])
y_data = np.array([58000,60200,63000,71000,84000,90500,107000])
plt.scatter(x_data, y_data, s = 100, c = 'green', marker='o', edgecolor='black', alpha=0.5, label = '产品销量')
plt.legend()
plt.savefig("scatter_demo.png")
复制代码
结果以下:
气泡图和上面的散点图很是相似,只是点的大小不同,并且是经过参数 s
来进行控制的,多的不说,仍是看个示例:
import matplotlib.pyplot as plt
import numpy as np
# 处理中文乱码
plt.rcParams['font.sans-serif']=['SimHei']
x_data = np.array([2011,2012,2013,2014,2015,2016,2017])
y_data = np.array([58000,60200,63000,71000,84000,90500,107000])
# 根据 y 值的不一样生成不一样的颜色
colors = y_data * 10
# 根据 y 值的不一样生成不一样的大小
area = y_data / 300
plt.scatter(x_data, y_data, s = area, c = colors, marker='o', edgecolor='black', alpha=0.5, label = '产品销量')
plt.legend()
plt.savefig("scatter_demo1.png")
复制代码
代码很少解释了,注释已经写得很清楚了,直接来看结果:
堆叠图的做用和折线图很是相似,它采用的是 stackplot()
方法。
语法以下:
plt.stackplot(x, y, labels, colors)
复制代码
stackplot()
堆叠图的语法比较简单,这里就很少介绍了,看过前面的同窗应该一眼就能明白,接下来咱们看个示例:
import matplotlib.pyplot as plt
# 处理中文乱码
plt.rcParams['font.sans-serif']=['SimHei']
x_data = [2011,2012,2013,2014,2015,2016,2017]
y_data = [58000,60200,63000,71000,84000,90500,107000]
y_data_1 = [78000,80200,93000,101000,64000,70500,87000]
plt.title(label='xxx 公司 xxx 产品销量')
plt.stackplot(x_data, y_data, y_data_1, labels=['产品销量', '用户增加数'])
plt.legend()
plt.savefig("stackplot_demo.png")
复制代码
结果以下:
雷达图各位同窗可能在玩游戏的时候常常看到,或者是作一些能力测评的时候,它能够直观的看出来一个事物的优点与不足。
在 plt 中创建雷达图是用 polar()
方法的,这个方法实际上是用来创建极坐标系的,而雷达图就是先在极坐标系中将各个点找出来,而后再将他们连线连起来。
语法以下:
plt.polar(theta, r, **kwargs)
复制代码
接下来咱们来看个示例,这个示例彻底出于小编本身幻想,无其余任何意义:
import numpy as np
import matplotlib.pyplot as plt
# 中文和负号的正常显示
plt.rcParams['font.sans-serif']=['SimHei']
plt.rcParams['axes.unicode_minus'] = False
# 使用ggplot的绘图风格
plt.style.use('ggplot')
# 构造数据
values = [3.2, 2.1, 3.5, 2.8, 3]
feature = ['攻击力', '防护力', '恢复力', '法术强度', '生命值']
N = len(values)
# 设置雷达图的角度,用于平分切开一个圆面
angles = np.linspace(0, 2 * np.pi, N, endpoint=False)
# 为了使雷达图一圈封闭起来,须要下面的步骤
values = np.concatenate((values, [values[0]]))
angles = np.concatenate((angles, [angles[0]]))
# 绘图
fig = plt.figure()
# 这里必定要设置为极坐标格式
ax = fig.add_subplot(111, polar=True)
# 绘制折线图
ax.plot(angles, values, 'o-', linewidth=2)
# 填充颜色
ax.fill(angles, values, alpha=0.25)
# 添加每一个特征的标签
ax.set_thetagrids(angles * 180 / np.pi, feature)
# 设置雷达图的范围
ax.set_ylim(0, 5)
# 添加标题
plt.title('游戏人物属性')
# 添加网格线
ax.grid(True)
# 显示图形
plt.savefig('polar_demo.png')
复制代码
结果以下:
饼图的做用和上面的雷达图有些相似,也是用来表示同一个事物的不一样类别的占比状况,它使用的是 plt 中的 pie
这个方法。
语法以下:
matplotlib.pyplot.pie(x, explode=None, labels=None, colors=None, autopct=None, pctdistance=0.6, shadow=False, labeldistance=1.1, startangle=None, radius=None, counterclock=True, wedgeprops=None, textprops=None, center=(0, 0), frame=False, hold=None, data=None)
复制代码
饼图的参数仍是比较复杂的,咱们接下来一个一个看:
来个简单的示例:
import matplotlib.pyplot as plt
# 中文和负号的正常显示
plt.rcParams['font.sans-serif']=['SimHei']
plt.rcParams['axes.unicode_minus'] = False
# 数据
edu = [0.2515,0.3724,0.3336,0.0368,0.0057]
labels = ['中专','大专','本科','硕士','其余']
# 让本科学历离圆心远一点
explode = [0,0,0.1,0,0]
# 将横、纵坐标轴标准化处理,保证饼图是一个正圆,不然为椭圆
plt.axes(aspect='equal')
# 自定义颜色
colors=['#9999ff','#ff9999','#7777aa','#2442aa','#dd5555'] # 自定义颜色
# 绘制饼图
plt.pie(x=edu, # 绘图数据
explode = explode, # 突出显示大专人群
labels = labels, # 添加教育水平标签
colors = colors, # 设置饼图的自定义填充色
autopct = '%.1f%%', # 设置百分比的格式,这里保留一位小数
)
# 添加图标题
plt.title('xxx 公司员工教育水平分布')
# 保存图形
plt.savefig('pie_demo.png')
复制代码
结果以下:
环形图实际上是另外一种饼图,使用的仍是上面的 pie()
这个方法,这里只须要设置一下参数 wedgeprops 便可。
示例以下:
import matplotlib.pyplot as plt
# 中文和负号的正常显示
plt.rcParams['font.sans-serif']=['SimHei']
plt.rcParams['axes.unicode_minus'] = False
# 数据
edu = [0.2515,0.3724,0.3336,0.0368,0.0057]
labels = ['中专','大专','本科','硕士','其余']
# 让本科学历离圆心远一点
explode = [0,0,0.1,0,0]
# 将横、纵坐标轴标准化处理,保证饼图是一个正圆,不然为椭圆
plt.axes(aspect='equal')
# 自定义颜色
colors=['#9999ff','#ff9999','#7777aa','#2442aa','#dd5555'] # 自定义颜色
# 绘制饼图
plt.pie(x=edu, # 绘图数据
explode = explode, # 突出显示大专人群
labels = labels, # 添加教育水平标签
colors = colors, # 设置饼图的自定义填充色
autopct = '%.1f%%', # 设置百分比的格式,这里保留一位小数
wedgeprops = {'width': 0.3, 'edgecolor':'green'}
)
# 添加图标题
plt.title('xxx 公司员工教育水平分布')
# 保存图形
plt.savefig('pie_demo1.png')
复制代码
这个示例仅仅在前面示例的基础上增长了一个参数 wedgeprops
的设置,咱们看下结果:
热力图用到的方法是 imshow()
,他的语法以下:
plt.imshow(x, cmap)
复制代码
首先这里要注意, x 是数据,可是必定要是矩阵形式的。
示例以下:
import numpy as np
import matplotlib.pyplot as plt
x = np.random.rand(10, 10)
plt.imshow(x, cmap=plt.cm.hot)
# 显示右边颜色条
plt.colorbar()
plt.savefig('imshow_demo.png')
复制代码
结果以下:
Matplotlib 的经常使用图表到这里就要结束了,接下来,咱们会接着介绍咱们以前说过的 pyecharts 的经常使用图表。
老规矩,全部的示例代码都会上传至代码管理仓库 Github 和 Gitee 上,方便你们取用。