首页 > 其他 > 详细

Matplotlib 中常见的图形

时间:2019-11-10 17:39:09      阅读:102      评论:0      收藏:0      [点我收藏+]
# 导包
from matplotlib import pyplot as plt
import numpy as np

线性图

简单线性图

  在图表的所有类型中,线性图最为简单。线性图的各个数据点由一条直线来连接. 一对对(x, y)值组成的数据点在图表中的位置取决于两条轴(x和y)的刻度范围
  如果要绘制一系列的数据点,需要创建两个Numpy数组. 首先, 创建包含x值的数组, 用作x轴. 再创建包含y值得数组,用作y轴. 完成了两个数组创建,只需要调用plot()函数绘制图像即可

# 生成[0, 2π]之间的等间距的100个点
x = np.linspace(0, 2* np.pi,num=100)
y = np.sin(x)
plt.plot(x,y)
plt.show()

绘制样式较全的线形图

# 设置中文字体,否则中文会出现方框状
plt.rcParams["font.sans-serif"] = [SimHei]
plt.rcParams[axes.unicode_minus] = False
# 准备 x 和 y
x = np.linspace(0, 2* np.pi,num=10)
y = np.sin(x)
# 调用绘制线性图函数plot()
plt.plot(x, y,
    color=#3589FF,    # 线的颜色
    linestyle=:,     # 线的风格
    linewidth=3,       # 线的宽度
    marker=o,       # 标记点的样式
    markerfacecolor=r,  # 标记点的颜色
    markersize=10,     # 标记点的大小
    alpha=0.7,        # 图形的透明度
    label="cos(x)"
)
plt.show()    

技术分享图片绘制多条折线

y1 = np.random.random(6)
y2 = np.random.random(6) 
x = np.arange(6)
plt.plot(x, y1, label=沈阳)
plt.plot(x, y2, label=大连)
plt.legend(loc=best)
plt.rcParams[font.sans-serif]=[SimHei]
plt.title(各城市房价(单位:万), fontsize=20)
index_name = [1月, 2月, 3月, 4月, 5月, 6月]
plt.xticks(x, index_name)
plt.show()

技术分享图片

x = np.linspace(0, 2 * np.pi, num=20)
y = np.sin(x)
# 调用绘制线性图函数plot()
plt.plot(x, y,
    color=#3589FF, # 线的颜色
    linestyle=:, # 线的风格
    linewidth=3, # 线的宽度
    marker=o, # 标记点的样式
    markerfacecolor=r, # 标记点的颜色
    markersize=10, # 标记点的大小
    alpha=0.7, # 图形的透明度
    label="sin(x)" #设置图例的label
)
siny = y.copy()
cosy = np.cos(x)
plt.plot(x, cosy,
    color=y, # 线的颜色
    linestyle=-, # 线的风格
    linewidth=3, # 线的宽度
    marker=*, # 标记点的样式
    markerfacecolor=b, # 标记点的颜色
    markersize=15, # 标记点的大小
    alpha=0.9, # 图形的透明度
    label="cos(x)" #设置图例的label
)
# 设置x,y轴的label
plt.xlabel(时间(s))
plt.ylabel(电压(V))
plt.legend()
plt.title(电压随时间变化的线性图)
# 调用show方法显式
plt.show()

技术分享图片

将DataFrame绘制成线性图

from pandas import DataFrame,Series
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
plt.rcParams["font.sans-serif"] = [SimHei]
plt.rcParams[axes.unicode_minus] = False
# %matplotlib inline
data_frame = DataFrame({
东软熙康: np.random.randint(10, 100, 5),
东软医疗: np.random.randint(10, 100, 5),
东软睿道: np.random.randint(10, 100, 5),
})
plt.plot(data_frame, marker=o)
# 显示图例
plt.legend(data_frame, loc=2)
# 设置x轴刻度标签
plt.xticks([0, 1, 2, 3, 4], [first, secod, third, forth, fifth])
plt.title(东软子公司1-5月份在职人员数量)
plt.xlabel(月份)
plt.ylabel(在职人数(百人))
# True 显示网格
# linestyle 设置线显示的类型(一共四种)
# color 设置网格的颜色
# linewidth 设置网格的宽度
# plt.grid(True, linestyle = "-.", color = "r", linewidth = "3")
plt.grid()
# 显示图形
plt.show()

技术分享图片

条状图

  条状图也是非常常用的一种图表类型. 条形图是统计图资料分析中最常用的图形。主要特点有:

  • 能够使人们一眼看出各个各个项目数据的大小
  • 易于比较各个不同项目数据之间的差别

垂直条状图

import matplotlib.pyplot as plt
import numpy as np
plt.rcParams["font.sans-serif"] = [SimHei]
plt.rcParams[axes.unicode_minus] = False
index = np.arange(5)
values1 = np.random.randint(11, 20, 5)
values2 = np.random.randint(11, 20, 5)
values3 = np.random.randint(11, 20, 5)
# bar宽度
bar_width = 0.3
# 每一个bar占0.3宽度
plt.bar(index-bar_width, values1, width=bar_width, alpha=0.7, label=社保项目1, color=b)
plt.bar(index, values2, width=bar_width, alpha=0.7, label=社保项目2, color=r)
plt.bar(index+bar_width, values3, width=bar_width, alpha=0.7, label=社保项目3, color=g)
# 显示图例
plt.legend(loc=1)
# 设置X轴、Y轴数值范围
# plt.xlim(-0.5, 5)
# plt.ylim(10, 20)
plt.axis([-0.6, 5, 10, 20])
# 设置x轴刻度标签 rotation旋转角度
plt.xticks(index, [社保项目+str(ix) for ix in range(1, 6)], rotation=30)
# 设置标题
plt.title(社保项目营收, fontsize=20)
plt.xlabel(项目类型)
plt.ylabel(项目合同额(亿元))
# 显示数值标签
for a,b in zip(index, values1):
    plt.text(a-bar_width, b, %.0f % b, ha=center, va=bottom, fontsize=7)
for a,b in zip(index, values2):
    plt.text(a, b, %.0f % b, ha=center, va=bottom, fontsize=7)
for a,b in zip(index, values3):
    plt.text(a+bar_width, b, %.0f % b, ha=center, va=bottom, fontsize=7)
# 显示网格
plt.grid()
plt.show()

技术分享图片

水平条状图

import numpy as np
import matplotlib.pyplot as plt
plt.rcParams["font.sans-serif"] = [SimHei]
plt.rcParams[axes.unicode_minus] = False
# 绘制水平条状图
index = np.arange(5)
values1 = np.random.randint(10, 17, 5)
values2 = np.random.randint(10, 17, 5)
values3 = np.random.randint(10, 17, 5)
# 绘制条状图
bar_height = 0.3
plt.barh(index, values1, height=0.3, label=社保项目1, color=r)
plt.barh(index+bar_height, values2, height=0.3, label=社保项目2, color=b)
plt.barh(index+bar_height*2, values3, height=0.3, label=社保项目2, color=y)
# y轴标签
plt.yticks(index + bar_height, list(ABCDE))
# 显示数值标签
for a, b in zip(values1, index):
    plt.text(a, b, %.0f % a, ha=left, va= center, fontsize=7)
for a, b in zip(values2, index):
    plt.text(a, b+bar_height, %.0f % a, ha=left, va= center, fontsize=7)
for a, b in zip(values3, index):
    plt.text(a, b+bar_height*2, %.0f % a, ha=left, va= center, fontsize=7)
# 设置标题
plt.title(社保项目营收, fontsize=20)
plt.xlabel(项目类型)
plt.ylabel(项目合同额(亿元))
plt.axis([0, 20, -0.4, 5])
plt.legend(loc=4)
plt.show()

技术分享图片

柱状图

  柱状图我们经常会用到,我们来看下如何画出柱状图,并在图上标注出数据对应的数值

import numpy as np
from matplotlib import pyplot as plt
k = 10
# 生成数据 x 和 y
x = np.arange(k)
y = np.random.random(k) 
# 画出 x 和 y 的柱状图
plt.bar(x, y)
# 增加数值
for x, y in zip(x, y):
# 标注数值
# ha=‘center‘ 横向居中对齐
# va=‘bottom‘纵向底部(顶部)对齐
    plt.text(x, y , %.2f % y, ha=center, va=bottom)
plt.show()

技术分享图片

饼图

  除了条状图, 饼图也可以用来表示数据,用pie()函数制作饼图很简单

import matplotlib.pyplot as plt
plt.rcParams["font.sans-serif"] = [SimHei]
plt.rcParams[axes.unicode_minus] = False
# %matplotlib inline
# 设置图像大小
plt.figure(figsize=(9, 9))
# 设置标签
labels = [Java开发, 项目经理, 测试运维人员, Python开发, 架构师]
# 标签对应的值
values = [6000, 1000, 2000, 7000, 500]
# 每一个标签饼图的颜色
colors = [red, #FEDD62, blue, gray, green]
# 那一块内容需要脱离饼图凸显, 可选值0-1
explode = [0.1, 0.1, 0, 0, 0]
"""
autopct =‘%1.1f%%‘表示显示百分比
shadow显示阴影
startangle 正值表示逆时针旋转
"""
plt.pie(values,
        labels=labels,
        colors=colors,
        explode=explode,
        startangle=90,
        shadow=True,
        autopct=%1.1f%%
        )
# 设置为标准圆形
plt.axis(equal)
# 显示图例
plt.legend(loc=2)
plt.title(东软软件工程师人员职位占比)
plt.show()

技术分享图片

散点图

  用两组数据构成多个坐标点,考察坐标点的分布,判断两变量之间是否存在某种关联或总结坐标点的分布模式。散点图将序列显示为一组点。值由点在图表中的位置表示。类别由图表中的不同标记表示。散点图通常用于比较跨类别的聚合数据

简单的散点图绘制

  绘制正态分布

from matplotlib import pyplot as plt
import numpy as np
# 散点 横轴和纵轴都是特征
x = np.random.normal(0, 1, 10000) # 均值为0 方差为1 正态分布
y = np.random.normal(0, 1, 10000)
plt.scatter(x, y, alpha=0.1)
plt.show()

技术分享图片

x = np.random.normal(0, 1, 10000)
y = np.random.normal(0, 1, 10000)
a = -2 + np.random.random(100) * 4
b = -2 + np.random.random(100) * 4
plt.scatter(x, y, color=g, alpha=0.1, label=沈阳)
plt.scatter(a, b, color=r, alpha=0.4, label=大连)
plt.rcParams["font.sans-serif"] = [SimHei]
plt.rcParams[axes.unicode_minus] = False
plt.legend()
plt.show()

技术分享图片

  绘制随机点

import matplotlib.pylab as plt
import numpy as np
# 随机生成500个点
k = 500
x = np.random.rand(k)
y = np.random.rand(k)
# 生成每个点的大小
size = np.random.rand(k) * 50
# 生成每个点的颜色大小
colour = np.arctan2(x, y)
plt.scatter(x, y, s=size, c=colour)
# 添加颜色栏
plt.colorbar()
plt.show()

技术分享图片

直方图

  直方图由竖立在 x 轴上的多个相邻的矩形组成,这些矩形把 x 轴拆分为一段段彼此不重叠的线段(线段两个端点所标识的数据范围也叫面元),矩形的面积跟落在其所对应的面元的元素数量成正比。这种可视化方法常被用于样本分布等统计研究。
  pyplot 用于绘制直方图的函数为 hist(),它能够接收一系列样本个体和期望的面元数量作为参数,把样本范围分成多个区间(面元),然后计算每个面元所包含的样本个体的数量。

简单直方图

pop = np.random.randint(0, 100, 10000)
plt.hist(pop, bins=200)
plt.show()

技术分享图片

画高斯分布直方图

pop = np.random.normal(0, 1, 1000000)
plt.hist(pop, bins=1500)
plt.show()

技术分享图片

 

 

 

Matplotlib 中常见的图形

原文:https://www.cnblogs.com/zry-yt/p/11830995.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!