欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

matplotlib 学习

程序员文章站 2022-07-14 10:10:21
...

1、LinePlot

import matplotlib.pyplot as plt
import numpy as np

t = np.arange(0.0,2.0,0.01)
s = 1 + np.sin(2*np.pi*t)

# fig,ax = plt.subplots() 等价于 先生成一个figure 然后再 添加子图(add_subplot(111))
fig = plt.figure()
ax = fig.add_subplot(111)
ax.plot(t,s)
ax.set(xlabel='time(s)',ylabel='voltage(mV)',title='About as simple as it gets,folks')
ax.grid()
plt.show()


matplotlib 学习

2、MultiPlot

import numpy as np
import matplotlib.pyplot as plt

x1 = np.linspace(0.0, 5.0) #linspace 默认 数据点为50个
x2 = np.linspace(0.0, 2.0)
y1 = np.cos(2*np.pi*x1)*np.exp(-x1)
y2 = np.cos(2*np.pi*x2)

'''
    可以直接用plt.subplot()
'''
# plt.subplot(2,1,1)
# plt.plot(x1,y1,'o-')
# plt.title('A tale of 2 subplots')
# plt.ylabel('Damped oscillation')
# plt.subplot(2,1,2)
# plt.plot(x2,y2,'.-')
# plt.xlabel('time (s)')
# plt.ylabel('Undamped')
# plt.show()

''' 
    可以生成figure 后 逐个添加 sub_plot
'''
fig = plt.figure()
ax = fig.add_subplot(211)
ax.plot(x1,y1,'*-')
ax.set_title('A tale of 2 subplots')
ax2 = fig.add_subplot(212)
ax2.plot(x2,y2,'o-')
ax2.set_title('Damped oscillation')
plt.show()


matplotlib 学习

3、Histogram(直方图)

import matplotlib
import numpy as np
import matplotlib.pyplot as plt

'''
    hist 函数就是根据输入的数据x 画出分布直方图(不同数据多少)
'''
np.random.seed(19680801) # 随机种子

mu = 100  # 均值
sigma = 15  # 标准差
#生成 400 个随机数列表
x = np.random.randn(400)
x = mu + sigma * np.random.randn(400)
num_bins = 50
fig, ax = plt.subplots()

'''input:
    x: 可以是一组或多组输入值
    num_bins:直方图数 用于计算bins 边界
    density: 保证所有直方图 和为1
    
    :return
    n : 每个直方图的值
    bins :长度为nbin + 1 每个直方图的左边缘值 + 最后一个右边缘值
    patches: 这个返回值可以不用管    
'''
n, bins, patches = ax.hist(x, num_bins, density=1)

#添加一个拟合直方图的曲线
y = ((1 / (np.sqrt(2 * np.pi) * sigma)) *
     np.exp(-0.5 * (1 / sigma * (bins - mu))**2))

ax.plot(bins, y, '--')
ax.set_xlabel('Smarts')
ax.set_ylabel('Probability density')
ax.set_title(r'Histogram of IQ: $\mu=100$, $\sigma=15$')

fig.tight_layout()
plt.show()

matplotlib 学习

4、BarCharts(条形图)

import numpy as np
import matplotlib.pyplot as plt
from matplotlib.ticker import MaxNLocator
from collections import namedtuple


n_groups = 5

means_men = (20, 35, 30, 35, 27)
std_men = (2, 3, 4, 1, 2)

means_women = (25, 32, 34, 20, 25)
std_women = (3, 5, 2, 3, 3)

fig, ax = plt.subplots()

index = np.arange(n_groups)
bar_width = 0.35

#透明度
opacity = 0.4
error_config = {'ecolor': '0.3'}

rects1 = ax.bar(index, means_men, bar_width,
                alpha=opacity, color='b',
                yerr=std_men, error_kw=error_config,
                label='Men')
# 注意起始位置 index+bar_width 控制 其与 rects1的间距
rects2 = ax.bar(index + bar_width, means_women, bar_width,
                alpha=opacity, color='r',
                yerr=std_women, error_kw=error_config,
                label='Women')

ax.set_xlabel('Group')
ax.set_ylabel('Scores')
ax.set_title('Scores by group and gender')
# tick 设置标记的位置
ax.set_xticks(index + bar_width/2)
#设置标记的标签
ax.set_xticklabels(('A', 'B', 'C', 'D', 'E'))
ax.legend()

fig.tight_layout()
plt.show()

matplotlib 学习

5、PieChart

import matplotlib.pyplot as plt

# counter-clockwise 标签按照逆时针画出
labels = 'Frogs', 'Hogs', 'Dogs', 'Logs'
sizes = [15, 30, 45, 10]

# 对第二个 'Hogs' 单独处理 往外偏移0.1
explode = (0, 0.1, 0, 0)

fig1, ax1 = plt.subplots()
'''
    size: array-like 数据值的数组
    explode:描述每一部分偏移量 长度必须和size相等
    autopct:指定 value值的格式 %% 表示%
    startangle:指定起始角度 ,默认为x轴 这里指定为90 即 逆时针旋转90度
'''
ax1.pie(sizes, explode=explode, labels=labels, autopct='%1.1f%%',
        shadow=True, startangle=90)

# 保证各部分占比相等 为圆形
ax1.axis('equal')

plt.show()

matplotlib 学习