庞玉栋个人博客、人生苦短-我用Python

Matplotlib可视化库的简单使用

发布时间:6年前热度: 1595 ℃评论数:

常见的图表类型

直方图:适用比较数据之间的多少;折线图:反映一组数据的变化趋势;条形图:显示各个项目之间的比较情况  和直方图有类似的作用;饼图;散点图:显示若干数据系列中各数值之间的关系 类似X,Y轴,判读两变量之间是否存在某种关联;箱型图:识别异常值方面有一定的优越性

直方图与条形图的具体区别如下:

首先,条形图用条形的长度表示各类别频率快的多少  其宽度是固定的  直方图是用面积表示各组频数的多少  矩形的高度表示每一组的频数和频率,,宽度则表示各组的组距,因此其高度与宽度均有意义。其次,由于分组数据具有连续性 所以直方图的各矩形通常都是连续排列的  而条形图则是分开排列的  最后 条形图主要用于展示分类数据  而直方图则主要用于展示数据型数据。


1通过subplot创建单个子图

#分成2*2的矩阵区域 
plt.subplot(221)
plt.plot(nums,nums)
plt.subplot(222)
plt.plot(nums,-nums)
plt.subplot(212)
plt.plot(nums,nums**2)
plt.show()

2通过subplots创建多个子图

#生成包含1~100之间所有整数数组
nums = np.arange(1,101)
#分成2*2的矩阵区域 返回子图数组axes
fig,axes = plt.subplots(2,2)
axes[0,0].plot(nums,nums)

plt.show()

3通过add_subplot添加和选中子图

fig = plt.figure()
#添加子图
fig.add_subplot(2,2,1)
fig.add_subplot(2,2,2)
fig.add_subplot(2,2,4)
fig.add_subplot(2,2,3)
#在子图上作图
random_arr = np.random.randn(100)
#默认是在最后一次使用subplot的位置上作图 即编号为3的位置
plt.plot(random_arr)

plt.show()

4添加各类标签

图表添加标签和图例的常用函数

title():设置当前轴的标题

xlabel():设置当前图形X轴的标签名称

ylabel():设置当前图形Y轴的标签名称

xticks():指定X轴刻度的数目与取值

yticks():指定Y轴刻度的数目与取值

xlim():设置或获取当前图形X轴的范围

ylim():设置或获取的当前图形Y轴的范围

legend():在轴上放置一个图例

import numpy as np
data = np.arange(0,1.1,0.01)
plt.title('Title')
plt.xlabel('x')
plt.ylabel('y')
#设置x和y轴的刻度
plt.xticks([0,0.5,1])
plt.yticks([0,0.5,1.0])
plt.plot(data,data**2,lineStyle='-.')
plt.plot(data,data**3)
plt.legend(['y=x^2','y=x^3'])

plt.show(

在适用Matplotlib绘图是  如果要设置的图表标题中有无中文字符,则会编程方格子而无法正确显示

解决方案:

#windos下
from pylab import mpl
mpl.reParams['font,sans-serif'] = ['SimHei']
#mac下
from pylab import mpl
mpl.rcParams['font.sans-serif'] = ['Arial Unicode MS']

另外由于字体封盖后 ,会导致坐标轴中的部分字符无法正常显示 这是需要更改axes unicode_minus参数

mpl.rcParams['axes.unicode_minus'] = False


常见生成多种图表的函数  

bar绘制条形图  pie:绘制饼图 scatter:绘制散点图 plot:绘制折线图 boxplot:绘制箱型图 hist:绘制直方图 barh 绘制水平条形图

直方图:

plt.hist(np.random.randn(100),bins=8,color='g',alpha=0.7)

plt.show()

散点图:

x = np.arange(51)
#创建另一个数组  表示很y轴数据
y = np.random.rand(51)*10
plt.scatter(x,y,marker='p')
plt.show()

案例

import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif'] = ['Arial Unicode MS']  #正常显示中文标签
area = jn['山东省,济宁市'].values
plt.figure(figsize=(12,6))
x_num = range(0,len(area))
y_dis = [i+0.3 for i in x_num]
plt.bar(x_num,area,colors='g',width=.3,label='总面积',labels='')
plt.show()


简单,使用

手机扫码访问