前言
本文的例子要求您有numpy, pandas, matplotlib,如果没有,需要您
pip install numpy
pip install pandas
pip install matplotlib
如果下载速度太慢,请看我另一篇博客: pip镜像管理和npm镜像管理
然后每次使用numpy都需要import 一下,以下默认都有
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
这篇文章会给大家看几个例子。
格式字符串
格式字符串由颜色、标记、线三部分组成。
改图截取自 Python matplotlib.pyplot.plot格式字符串 ,这位博主总结的挺不错的。
例子1 :一幅图内画多个函数
import numpy as np
import matplotlib.pyplot as plt
"""
格式字符串中的顺序没有要求
color: g 绿色, b 蓝色, r 红色, m 酒红色
marker: o 圆圈标记, -横线标记, 1 三叉戟标记, p五边形标记
line: -实线, ..点和虚线交替, : 点线, --选线
"""
a = np.arange(10)
plt.plot(a, a * 1.5, 'go-',
a, a ** 2, 'b-..',
a, a * 5, 'r1:',
a, np.sin(a), 'mp--')
plt.show()
例子2: 横纵坐标打标签
import numpy as np
import matplotlib.pyplot as plt
x = np.arange(5)
y = x * 5
plt.plot(x, y)
plt.xticks(x, ('Tom', 'Dick', 'Harry', 'Sally', 'Sue'), rotation=90)
plt.yticks(y, ('A', 'B', 'C', 'D', 'E'), rotation=45)
plt.show()
这里横坐标的标签是plt.xticks() 第二个参数设置的,并且第三个参数rotation让标签逆时针旋转了90度。
纵坐标的标签是plt.yticks() 第二个参数设置的,并且第三个参数rotation让标签逆时针旋转了45度。
例子3: 给图打标题
import numpy as np
import matplotlib.pyplot as plt
# 第一个图
plt.title('Interesting Graph', fontstyle='italic', backgroundcolor='y')
plt.plot([1, 2, 3, 4, 5], [3, 6, 7, 9, 2], 'r--')
plt.show()
# 第二个图
x = np.arange(50)
y = x ** 5
plt.plot(x, y, 'b-')
plt.title('Interesting Graph', fontsize=22, fontweight='light', color='w', backgroundcolor='g')
plt.show()
第一个图:
第二个图:
例子4: 给x轴和y轴打标题,并限制x轴和y轴取值范围
import matplotlib.pyplot as plt
import numpy as np
x = np.linspace(0, 10, 1000)
y = np.sin(x)
plt.plot(x, y, 'b:')
# 添加 x 轴和 y 轴标题
plt.xlabel('x-axis')
plt.ylabel('y-axis')
# 设置x轴和y轴的取值范围
plt.xlim(-1, 12)
plt.ylim(ymin=-1.5, ymax=1.5)
plt.show()
例子5: 标题显示中文并设置legend
import matplotlib.pyplot as plt
import numpy as np
x = np.arange(5)
y = x * 5
# 为了显示中文,指定默认字体
plt.rcParams['font.sans-serif'] = ['SimHei']
plot1, = plt.plot([1, 2, 3, 4, 5], [3, 6, 7, 9, 2], 'r--')
plot2, = plt.plot(x, y, 'b-')
plot3, = plt.plot(x, y * 3, 'y:')
# 设置legend
plt.legend((plot1, plot2, plot3), ('plot1', 'plot2', 'plot3'))
plt.title('有趣的图', fontsize=22, fontweight='light', color='w', backgroundcolor='g')
plt.show()
例子6:分布条状图
import numpy as np
import matplotlib.pyplot as plt
np.random.seed(1)
# 生成数据,以100组均值为70,方差为15的高斯分布数据为例
data = np.random.normal(70, 15, 100)
# 图一
plt.hist(data, bins=100, color='g', edgecolor=None, histtype='bar', rwidth=0.5)
plt.show()
# 图二
plt.hist(data, bins=50, color='b', edgecolor='r', histtype='step')
plt.show()
图一:
图二:
我们来说说plt.hist() 的两个参数(该例子其他参数看一下图和代码应该就明白了):
- x : (n,) array or sequence of (n,) arrays
这个参数是指定每个bin(箱子)分布的数据,对应x轴,该例子传入了data - bins : integer or array_like, optional
这个参数指定bin(箱子)的个数,也就是总共有几条条状图。该例子用了标量直接指定,也可以像下一个例子一样使用序列。
例子7:
本文用到的stock.csv格式:(截取了一部分给大家看)
import numpy as np
import matplotlib.pyplot as plt
# 只用到第5列(开始以第1列算起的话)
close_price = np.loadtxt('stock.csv', delimiter=',',
usecols=(4,), unpack=True, skiprows=1)
bins = np.arange(9, 14, 0.2)
plt.hist(close_price, bins, rwidth=0.8) # 条形宽度设为80%
# 为了显示中文,指定默认字体
plt.rcParams['font.sans-serif'] = ['SimHei']
# 设置刻度字体大小
plt.xticks(fontsize=15)
plt.yticks(fontsize=15)
plt.xlabel('股票价格', fontsize=15)
plt.ylabel('出现次数', fontsize=15)
plt.title('收盘价分布直方图', fontsize=18)
plt.show()
这里说一下np.loadtxt() 的参数:
delimiter 是用于 指定读取文件中数据的分割符,usecols 是用于 指定需要读取的列,unpack 是用于 选择是否将数据进行向量输出, skiprows 是用于 选择跳过的行数。
例子8: 饼图
import matplotlib.pyplot as plt
labels = ['apple', 'pear', 'grape', 'waterma']
sizes = [15, 30, 45, 10]
explode = (0, 0.1, 0.1, 0) # 爆炸第二,三块饼,爆炸距离是半径的0.1。
plt.pie(sizes, explode=explode, labels=labels, autopct='%.1f%%', pctdistance=0.7, shadow=True, startangle=45)
plt.show()
例子9:绘制多个图形
# 绘制多个图形
import matplotlib.pyplot as plt
import numpy as np
def f(t):
return np.exp(-t) * np.cos(2 * np.pi * t)
t1 = np.arange(0, 5, 0.1)
t2 = np.arange(0, 5, 0.02)
# 解决负号不能正常显示问题
plt.rcParams['axes.unicode_minus'] = False
# 解决中文不能显示的问题
plt.rcParams['font.sans-serif'] = ['SimHei']
# 设置整张图大小
plt.figure(12)
# 也可以写成 plt.subplot(221)
plt.subplot(2, 2, 1)
plt.title('图一', backgroundcolor='y')
plt.plot(t1, f(t1), 'bo', t2, f(t2), 'r--')
plt.subplot(2, 2, 2)
plt.title('图二', backgroundcolor='g', color='w')
plt.plot(t2, np.cos(2 * np.pi * t2), 'r--')
plt.subplot(2, 1, 2)
plt.title('图三', backgroundcolor='b', color='w')
plt.plot([1, 2, 3, 4], [1, 4, 9, 16])
plt.show()
其中,figure语法如下:
figure(num=None, figsize=None, dpi=None, facecolor=None, edgecolor=None, frameon=True)
- num:图像编号或名称,数字为编号 ,字符串为名称
- figsize:指定figure的宽和高,单位为英寸;
- dpi参数指定绘图对象的分辨率,即每英寸多少个像素,缺省值为80,其中1英寸等于2.5cm,A4纸是 21*30cm的纸张
- facecolor:背景颜色
- edgecolor:边框颜色
- frameon:是否显示边框
这部分资料figure参数的解释来源于【Python】 【绘图】plt.figure()的使用 这篇文章。
结语
好了,matplotlib绝不是我这点篇幅就能说完的。它还有很多炫酷的用法,大家可以去一下网站看看:
感谢观看。