0
点赞
收藏
分享

微信扫一扫

python matplotlib


文章目录

  • ​​数据可视化Matplotlib库​​
  • ​​绘制图标的基本流程​​
  • ​​绘制图表pyplot函数常用参数​​
  • ​​pyplot的中文显示​​
  • ​​pyplot的文本显示函数​​
  • ​​绘制图标示例​​
  • ​​pyplot的绘图区域​​
  • ​​pyplot的基础图表函数​​
  • ​​常见图标绘制示例​​

数据可视化Matplotlib库

Matplotlib库有各种可视化类构成,内部结构复杂
matplotib.pyplot是绘制各类可视化图形的命令字库,相当于快捷方式

绘制图标的基本流程

import matplotlib.pyplot as plt
import random
# 1.准备数据
x = range(60)
y = [random.uniform(15, 18) for i in x]
# 2.创建画布
plt.figure(figsize=(20, 8), dpi=100)
# 3.绘制图像
plt.plot(x, y)
# 4.图像保存
# 注意:图片保存要放在show前面,show会释放图片资源
plt.savefig("path")
# 5.图像显示
plt.show()

绘制图表pyplot函数常用参数

​plt.plot(x, y, format_string, **kwargs)​x:x轴数据,列表或数组, 可选
y:y轴数据,列表或数组
format_string:控制曲线的格式字符串,可选。由颜色字符、风格字符、标记字符组成
颜色字符:"b"蓝色, "g"绿色, "r"红色, "y"黄色, "k"黑色, "w"白色, “#00FF00"RGB颜色
风格字符:”-"实线, "–"破折线, "-."点划线, ":“虚线
标记字符:”."点标记, "o"实心圈标记
**kwargs:第二组或更多(x, y, format_string)

import matplotlib.pyplot as plt
>>> import numpy as np
>>> a = np.arange(10)
>>> plt.plot(a, a*1.5, "go-", a, a*2.5, "rx", a, a*3.5, "*")

pyplot的中文显示

1、pyplot不默认支持中文显示,需要rcParams修改全局字体实现

from pylab import mpl
# 设置显示中文字体
mpl.rcParams["font.sans-serif"] = ["SimHei"]
# 设置正常显示符号
mpl.rcParams["axes.unicode_minus"] = False

2、在有中文输出的地方,增加一个属性:fontproperties

import matplotlib.pyplot as plt
import numpy as np
a = np.arange(0, 5, 0.1)
plt.plot(a, np.cos(a))
plt.xlabel("横轴(值)", fontproperties="SimHei", fontsize=20)
plt.ylabel("纵轴(值)", fontproperties="SimHei", fontsize=20)
plt.show()

pyplot的文本显示函数

plt.xlabel()

对x轴增加文本标签

plt.ylabel()

对y轴增加文本标签

plt.title()

对图形整体增加文本标签

plt.text()

在任意位置增加文本

plt.annotate()

在图形中增加带箭头的注释

import matplotlib.pyplot as plt
import numpy as np

a = np.arange(0, 10, 0.1)
plt.plot(a, np.cos(a), "b--")

plt.title("cos函数图像", fontproperties="SimHei", fontsize=25)
plt.xlabel("横轴(值)", fontproperties="SimHei", fontsize=15, color="green")
plt.ylabel("纵轴(值)", fontproperties="SimHei", fontsize=15)
plt.text(np.pi*2, 1.0, "峰值", fontproperties="SimHei")
plt.annotate("y=1", xy=(0, 1), xytext=(1, 1.5), arrowprops=dict(facecolor="green", shrink=0.1, width=2))
plt.grid(True) # 网格线
plt.axis([0, 10, -2, 2])
plt.show()

绘制图标示例

import matplotlib.pyplot as plt
import random
from pylab import mpl

# 设置显示中文字体
mpl.rcParams["font.sans-serif"] = ["SimHei"]
# 设置正常显示符号
mpl.rcParams["axes.unicode_minus"] = False

# 准备数据
x = range(60)
y_shanghai = [random.uniform(15, 18) for i in x]
y_beijing = [random.uniform(1, 5) for i in x]

# 创建画布
plt.figure(figsize=(20, 8), dpi=100)

# 设置x,y轴和标题信息
plt.xlabel("时间")
plt.ylabel("温度")
plt.title("温度变化")
# 绘制图像
plt.plot(x,y_shanghai, color="r", label="shanghai")
plt.plot(x, y_beijing, color="g", linestyle="-.", label="beijing")

# 添加x.y轴刻度
# 设置x,y轴刻度
x_ticks_label = ["11点{}分".format(i) for i in x]
y_ticks = range(40)

# 修改x,y轴刻度显示
plt.xticks(x[::5], x_ticks_label[::5])
plt.yticks(y_ticks[::5])

# 添加网格显示
plt.grid(True, linestyle='--', alpha=0.5)

# 显示图例
plt.legend(loc="best") # best:自动的找一个最好的位置

# 图像显示
plt.show()

pyplot的绘图区域

1、subplot函数
​​​plt.subplot(nrows, ncols, plot_number) # plot_number是当前那个区域​

import numpy as np
import matplotlib.pyplot as plt

def f(t):
return np.exp(-t) * np.cos(2*np.pi*t)

a = np.arange(0.0, 5.0, 0.02) # 从0.0到5.0步长为0.02

plt.subplot(2, 1, 1)
plt.plot(a, f(a))

plt.subplot(2, 1, 2)
plt.plot(a, np.cos(a))
plt.show()

2、使用subplot2grid函数
​​​plt.subplot2grid(GridSpace, CurSpec, colspan=1, rowspan=1)​​​ 设定网格,选中网格,确定选中行列区域数量,编号从0开始
例如​​plt.subplot2grid((3, 3), (1, 0), colspan=2, rowspan=2)​​ 3x3网格,选中(1,0)区域,列延伸2两个网格,行延伸两个网格

3、使用GridSpec类

面向对象方式使用画图

import matplotlib.gridspec as gridspec
import matplotlib.pyplot as plt
gs = gridspec.GridSpec(3, 3) # 3x3网格
ax1 = plt.subplot(gs[0, :])
ax2 = plt.subplot(gs[1, :-1])

subplot示例

# 准备数据
y_shanghai = [random.uniform(15, 18) for i in x]
y_beijing = [random.uniform(1, 5) for i in x]

# 创建画布
fig, axes = plt.subplots(nrows=1, ncols=2, figsize=(20, 8), dpi=100)

# 添加描述信息
axes[0].set_xlabel("时间")
axes[0].set_ylabel("温度")
axes[0].set_title("shanghai")
axes[1].set_xlabel("时间")
axes[1].set_ylabel("温度")
axes[1].set_title("beijing")

# 绘制图像
axes[0].plot(x, y_shanghai, color="r", label="shanghai")
axes[1].plot(x, y_beijing, color="g", linestyle="-.", label="beijing")

# 添加x.y轴刻度
# 设置x,y轴刻度
x = range(60)
y_ticks = range(40)
x_ticks_label = ["11点{}分".format(i) for i in x]

# 修改x,y轴刻度显示
axes[0].set_xticks(x[::5])
axes[0].set_yticks(y_ticks[::5])
axes[0].set_xticklabels(x_ticks_label[::5])
axes[1].set_xticks(x[::5])
axes[1].set_yticks(y_ticks[::5])
axes[1].set_xticklabels(x_ticks_label[::5])

# 添加网格显示
axes[0].grid(True, linestyle='--', alpha=0.5)
axes[1].grid(True, linestyle='--', alpha=0.5)

# 显示图例
axes[0].legend(loc="best") # best:自动的找一个最好的位置
axes[1].legend(loc="best") # best:自动的找一个最好的位置

# 图像显示
plt.show()

pyplot的基础图表函数

plt.plot(x, y, fmt, …)

绘制一个坐标图

plt.boxplot(data, motch, position)

绘制一个箱型图

plt.bar(left, height, width, bottom)

绘制一个条形图

plt.barh(width, bottom, left, height)

绘制一个横向条形图

plt.polar(theta, r)

绘制极坐标图

plt.pie(data, explode)

绘制饼图

plt.cohere(x, y, NFFT=256, Fs)

绘制x-y的相关性函数

plt.scatter(x, y)

绘制散点图,其中x和y长度相同

plt.hist(x, bins, normed)

绘制直方图

plt.plot_date()

绘制数据日期

常见图标绘制示例

pyplot散点图的绘制

import matplotlib.pyplot as plt
import numpy as np

fig, ax = plt.subplots() # 默认是111
ax.plot(10*np.random.randn(100), 10*np.random.randn(100), 'o')
ax.set_title("Simple Scatter")

plt.show()
pyplot饼图的绘制

import matplotlib.pyplot as plt
labels = "Frogs", "Hogs", "Dogs", "Logs"
sizes = [15, 30, 45, 10]
explodes = (0, 0.1, 0, 0) # 指出那一块突出来
plt.pie(sizes, explode=explodes, labels=labels, autopct="%1.1f%%",
shadow=False, startangle=90) # shadow是否有阴影, startangele起始角度
plt.axis("equal") # 正圆形
plt.title("饼图", fontproperties="SimHei")
plt.show()
pyplot直方图的绘制

import matplotlib.pyplot as plt
import numpy as np

np.random.seed(0)
mu, sigma = 100, 20 # 均值和标准差
a = np.random.normal(mu, sigma, size=100) # 正态分布

plt.hist(a, 40, density=1, histtype="stepfilled",
facecolor="b", alpha=0.75)
# 40表示直方条的个数
# density=0时纵坐标是出现的次数,density=1时表示概率
plt.title("Histogram")
plt.show()
pyplot极坐标图的绘制

import matplotlib.pyplot as plt
import numpy as np

N = 20 # 数据个数
theta = np.linspace(0.0, 2 * np.pi, N, endpoint=False) # 0.0到2pi填充N个数据
radii = 10 * np.random.rand(N) # 随机生成N个数的数组
width = np.pi / 4 * np.random.rand(N) # 宽度值

ax = plt.subplot(111, projection="polar")
# left:theta, height:radii, width:width
bars = ax.bar(theta, radii, width=width, bottom=0.0)

for r, bar in zip(radii, bars):
bar.set_facecolor(plt.cm.viridis(r/10.0))
bar.set_alpha(0.5)
plt.show()
散点

from sklearn.datasets import make_blobs
from sklearn.cluster import AgglomerativeClustering
import matplotlib.pyplot as plt

X, y = make_blobs(random_state=1)
color = ["red", "blue", "green"]
agg = AgglomerativeClustering(n_clusters=3)
assigment = agg.fit_predict(X)
for i in range(len(X)):
a = X[i, 0]
b = X[i, 1]
s = assigment[i]
plt.scatter(a, b, s=20, c=color[s])
plt.legend(color)
plt.show()


举报

相关推荐

0 条评论