matplotlib 绘图基础
pylab - 类MATLAB API
- 最简单的入门是从类 MATLAB API 开始,它被设计成兼容 MATLAB 绘图函数。
- pylab 是 matplotlib 面向对象绘图库的一个接口。它的语法和 Matlab 十分相近。也就是说,它主要的绘图命令和 Matlab 对应的命令有相似的参数。
# 在jupyter notebook里面需要添加此命令才能打印图表,jupter lab里面则不需要
%matplotlib inline
# 导入所需包
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
plt.style.use('ggplot')
# 解决中文乱码问题
from pylab import mpl
mpl.rcParams['font.sans-serif'] = ['SimHei']
# 解决坐标轴刻度负号乱码
plt.rcParams['axes.unicode_minus'] = False
# 设置图片大小,单位为英寸
plt.rc('figure', figsize=(6, 4))
x = np.linspace(-5,5,10)
y = x**2
plt.figure() #实例化一个绘图对象
plt.plot(x,y,'r') #绘图
plt.xlabel('x') #添加坐标轴标签
plt.ylabel('y')
plt.title('matplotlib方式绘图'); #添加标题
[外链图片转存(img-LpQMHbaS-1562729989747)(output_5_0.png)]
from pylab import *
x = np.linspace(-5,5,10)
y = x**2
figure()
plot(x,y,'b')
xlabel('x')
ylabel('y')
title('pylab方式绘图');
[外链图片转存(img-oZxtNzSg-1562729989748)(output_6_0.png)]
# 创建子图,选择绘图用的颜色与描点符号:
subplot(1,2,1)
plot(x,y,'r--')
subplot(1,2,2)
plot(y,x,'g*-');
[外链图片转存(img-H55cTbWH-1562729989748)(output_7_0.png)]
此类 API 的好处是可以节省你的代码量,但是我们并不鼓励使用它处理复杂的图表。处理复杂图表时, matplotlib 面向对象 API 是一个更好的选择。
matplotlib 面向对象 API
- 使用面向对象API的方法和之前例子里的看起来很类似,不同的是,我们并不创建一个全局实例,而是将新建实例的引用保存在 fig 变量中,如果我们想在图中新建一个坐标轴实例,只需要调用 fig实例的 add_axes 方法
- 尽管会写更多的代码,好处在于我们对于图表的绘制有了完全的控制权,可以很容易地多加一个坐标轴到图中
import matplotlib.pyplot as plt
import numpy as np
np.random.seed(1026)
# 导入包
import matplotlib.pyplot as plt
import numpy as np
np.random.seed(1026)
调用figure创建一个绘图对象,并且使它成为当前的绘图对象。(可选)
面向对象的方式
通过figure对象的.add_axes的方法添加坐标轴
x = np.linspace(0,5,10)
y = x**2
fig = plt.figure(figsize=(8,4)) #创建一个绘图对象
# fig = plt.figure(figsize=(8,4), dpi=100)
# figsize参数:指定绘图对象的宽度和高度,单位为英寸
# dpi参数指定绘图对象的分辨率,即每英寸多少个像素,缺省值为80
axes = fig.add_axes([0.1,0.1,0.8,0.8]) # 添加坐标轴 left, bottom, width, height (range 0 to 1)
axes.plot(x,y,'r')
axes.set_xlabel('x')
axes.set_ylabel('y')
axes.set_title('面向对象的方式绘图')
# 显示图形
plt.show()
[外链图片转存(img-NojEMwd4-1562729989748)(output_16_0.png)]
fig = plt.figure(figsize=(8,4))
axes = fig.add_axes([0.1,0.1,0.8,0.8]) # A 4-length sequence of [left, bottom, width, height] quantities.
axes.plot(x,y,'r')
axes.set_xlabel('x')
axes.set_ylabel('y')
axes.set_title('标题1')
axes2 = fig.add_axes([0.2,0.5,0.4,0.3])
axes2.plot(y,x,'g')
axes2.set_xlabel('y')
axes2.set_ylabel('x')
axes2.set_title('标题2')
plt.show()
[外链图片转存(img-82yBEGYi-1562729989749)(output_17_0.png)]
fig = plt.figure()
axes = fig.add_axes([0.1, 0.1, 0.8, 0.8])
axes.plot(x, y, 'r')
axes.set_xlabel('x')
axes.set_ylabel('y')
axes.set_title('标题1')
axes2 = fig.add_axes([0.2, 0.5, 0.4, 0.3])
axes2.plot(y, x, 'g')
axes2.set_xlabel('y')
axes2.set_ylabel('x')
axes2.set_title('标题2')
plt.show()
[外链图片转存(img-2smgNWrW-1562729989749)(output_18_0.png)]
通过figure对象的.add_subplot方法添加子图
# fig.add_subplot?
fig = plt.figure()
ax = fig.add_subplot(349) # 参数349的意思是:将画布分割成3行4列,图像画在从左到右从上到下的第9块,如下图:
# ax = fig.add_subplot(3410) # 若果要在第10块上画图,3410是不可以的!
ax.plot(x,y)
ax.set_title('面向对象的方式绘图-add_subplot')
plt.show()
[外链图片转存(img-kcpRnEzW-1562729989749)(output_21_0.png)]
在jupyter notebook里面效果不明显,在python IDLE里面演示
# fig.add_subplot?
fig = plt.figure()
ax = fig.add_subplot(2,1,1)
ax.set_title('面向对象的方式绘图-add_subplot')
ax.plot(x,y)
ax = fig.add_subplot(2,2,3)
ax.plot(x,y)
plt.show()
[外链图片转存(img-TkyGqJWX-1562729989749)(output_24_0.png)]
pyplot的方式
通过调用pyplot的plot方法在当前的绘图对象中进行绘图
[0, 2pi] 上的正弦曲线
# 设置图片大小,单位为英寸
plt.rc('figure', figsize=(8, 4))
x = np.linspace(0, 2 * np.pi, 50)
plt.plot(x, np.sin(x))
plt.show()
[外链图片转存(img-eKIwG3nx-1562729989750)(output_28_0.png)]
# 如果没有第一个参数 x,图形的 x 坐标默认为数组的索引
plt.plot(np.sin(x));
[外链图片转存(img-BFKoRoSZ-1562729989750)(output_29_0.png)]
x = np.linspace(0, 2 * np.pi, 50)
# 在调用 plt.plot() 的时候多传入了一组数据集,并用逗号与第一组数据集分隔开。
plt.plot(x, np.sin(x), x, np.sin(2 * x))
plt.title('正弦曲线') # 添加标题
<matplotlib.text.Text at 0x7ac5f98>
[外链图片转存(img-RJTevdlP-1562729989750)(output_30_1.png)]
plt.plot()实际上会通过plt.gca()获得当前的Axes对象ax,然后再调用ax.plot()方法实现真正的绘图。
x = range(0, 50)
y = [num**2 for num in x]
fig = plt.figure(figsize=(8,5)) # 创建figure实例
ax = fig.add_subplot(111) # 创建axes实例在figure实例fig中
ax.plot(x, y) # 创建二维线图实例在axes中
[<matplotlib.lines.Line2D at 0x7abf320>]
[外链图片转存(img-Zs8vPU7a-1562729989751)(output_32_1.png)]
# 获取当前的图表
plt.gcf()
# 获取当前子图
plt.gca()
# 清空当前 figure
plt.clf()
# 清空plt绘制的内容
plt.clf()
# 关闭图 0
plt.close(0)
# 关闭所有图
plt.close('all')
# 获取当前figure的引用,设置图片大小
plt.gcf().set_size_inches(16,8)
<matplotlib.figure.Figure at 0x7e86eb8>
plt.figure(1) # 创建图表1
plt.figure(2) # 创建图表2
ax1 = plt.subplot(121) # 在图表2中创建子图1
ax2 = plt.subplot(122) # 在图表2中创建子图2
x = np.linspace(0, 3, 100)
for i in range(3):
plt.figure(1) # 选择图表1
plt.plot(x, np.exp(i*x/3))
plt.sca(ax1) # 选择图表2的子图1
plt.plot(x, np.sin(i*x))
plt.sca(ax2) # 选择图表2的子图2
plt.plot(x, np.cos(i*x))
plt.show()
[外链图片转存(img-kLNJ0fhQ-1562729989751)(output_34_0.png)]
[外链图片转存(img-83IWYTEd-1562729989751)(output_34_1.png)]
自定义曲线的外观
# plt.plot?
x = np.linspace(0, 2 * np.pi, 50)
plt.plot(x, np.sin(x), color='y',
linestyle='-.',
linewidth=5,
marker='o',
markersize=3
);
[外链图片转存(img-Qw6H0NiK-1562729989751)(output_37_0.png)]
# 可以将颜色,线型,标记形状写在一起
x = np.linspace(0, 2 * np.pi, 50)
plt.plot(x, np.sin(x), 'y--H',
linewidth=5,
markersize=10
);
[外链图片转存(img-hj1IoSvf-1562729989752)(output_38_0.png)]
x = np.linspace(0, 2 * np.pi, 50)
# 两种不同的曲线样式:'r-o' 和 'g--'。字母‘r’和‘g’代表线条的颜色,后面的符号代表线和点标记的类型。
# 例如 '-o' 代表包含实心点标记的实线,'--' 代表虚线。
plt.plot(x, np.sin(x), 'k-o', x, np.cos(x), 'g-.');
[外链图片转存(img-fKmnj5A3-1562729989752)(output_39_0.png)]
# plot方法
# plt.plot?
颜色、标记、线型
颜色 | 字符 |
---|---|
蓝色 | b |
绿色 | g |
红色 | r |
青色 | c |
品红 | m |
黄色 | y |
黑色 | k('b’代表蓝色,所以这里用黑色的最后一个字母) |
白色 | w |
线型 | 标记 |
---|---|
直线 | - |
虚线 | – |
点线 | : |
点划线 | -. |
点标记名称 | 标记 |
---|---|
点 | . |
像素 | , |
圆 | o |
方形 | s’ |
三角形(向下,上,左,右) | v, ^, <, > |
三角星(向下,上,左,右) | 1, 2, 3, 4 |
五角形 | p |
星形 | * |
六角形 | h |
六角形 | H |
加号 | + |
x号 | x |
菱形 | D |
窄菱形 | d |
竖线 | 竖线 |
横线 | _ |
在一个窗口绘制多个图
# plt.subplots?
# subplots的方法
x = linspace(0, 5, 10)
y = x ** 2
fig, axes = plt.subplots(nrows=1, ncols=2)
for ax in axes:
ax.plot(x, y, 'r')
ax.set_xlabel('x')
ax.set_ylabel('y')
ax.set_title('title')
plt.show()
[外链图片转存(img-jWAYGfcC-1562729989752)(output_45_0.png)]
# subplots的方法
x = linspace(0, 5, 10)
y = x ** 2
fig, axes = plt.subplots(nrows=1, ncols=2)
axes[1].plot(x, y, 'r')
axes[1].set_xlabel('x')
axes[1].set_ylabel('y')
axes[1].set_title('title');
[外链图片转存(img-79KCShbp-1562729989752)(output_46_0.png)]
# subplots的方法
x = linspace(0, 5, 10)
y = x ** 2
fig, axes = plt.subplots(nrows=1, ncols=2, sharex=False, sharey=True) # 共享坐标轴
for ax in axes:
ax.plot(x, y, 'r')
ax.set_xlabel('x')
ax.set_ylabel('y')
ax.set_title('title')
plt.show()
[外链图片转存(img-D17rQqmN-1562729989753)(output_47_0.png)]
# plt.subplot?
# subplot的方法
x = np.linspace(0, 2 * np.pi, 50)
# 调用子绘图方法,生成多个绘图区,并指向某子绘图区并作图
plt.subplot(2, 1, 1) # 行,列,活跃区
plt.plot(x, np.sin(x), 'bo-', label='sin(x)')
# 添加标题
plt.title('sin(x) vs cos(x)')
# 添加纵坐标标签
plt.ylabel('sin(x)')
# 设置Y轴的范围
plt.xlim(-2,10)
plt.legend()
# 指向第二个绘图子区
plt.subplot(2, 1, 2)
plt.plot(x, np.cos(x), 'g.:', label='cos(x)')
# 添加纵横坐标标签
plt.xlabel('x')
plt.ylabel('cos(x)')
# 设置Y轴的范围
plt.ylim(-2,2)
# 显示图例
plt.legend();
[外链图片转存(img-XScopjCG-1562729989753)(output_49_0.png)]
共享坐标轴,调整subplot周围间距
# plt.subplots_adjust?
subplots_adjust(left=None, bottom=None, right=None, top=None, wspace=None, hspace=None)
参数 | 说明 |
---|---|
left = 0.125 | 左边框位置 |
right = 0.9 | 右边框位置 |
top = 0.9 | 上边框位置 |
bottom = 0.1 | 下边框位置 |
wspace = 0.2 | 子绘图区之间预留空白空间的宽度,为平均轴宽的一小部分。 |
hspace = 0.2 | 子绘图区之间预留空白空间的高度,为平均轴宽的一小部分。 |
fig, axes = plt.subplots(2, 2, sharex=True, sharey=True)
for i in range(2):
for j in range(2):
axes[i,j].plot(np.random.randn(100),color='b')
plt.subplots_adjust(wspace=0, hspace=0)
plt.show()
[外链图片转存(img-uRsAiB8m-1562729989753)(output_53_0.png)]
添加标题,坐标轴标记和图例
图例是位于图像一角或者一侧的用于说明图像中的各种符号、线条等所代表的内容与指标的辅助性标识,它有助于我们更好的了解图像内容。
# plt.legend?
x = np.linspace(0, 2 * np.pi, 50)
# 创建画布并设置大小
plt.figure(figsize=(8,5))
plt.plot(x, np.sin(x), 'r-x', label='Sin(x)')
# plt.plot(x, np.cos(x), 'g-^', label='Cos(x)')
plt.plot(x, np.cos(x), 'g-o', label='Cos(x)')
plt.legend(loc=0)
# plt.legend(loc='center right')
# plt.legend(loc='best') # 展示图例, 并放在最佳位置
plt.xlabel('Rads') # 给 x 轴添加标签
plt.ylabel('Amplitude') # 给 y 轴添加标签
plt.title('Sin and Cos Waves') # 添加图形标题
plt.ylim(-1.5, 1.5) # y轴的刻度范围
plt.grid() # 添加网格
plt.savefig("Sin and Cos Waves.png", dpi=800) # 保存图
plt.show()
[外链图片转存(img-qOWRgjoq-1562729989754)(output_57_0.png)]
x = np.linspace(0, 10, 1000)
y = np.sin(x)
z = np.cos(x**2)
# label : 给所绘制的曲线一个名字,此名字在图示(legend)中显示。
# 只要在字符串前后添加"$"符号,matplotlib就会使用其内嵌的latex引擎绘制的数学公式。
plt.plot(x,y,label="$sin(x)$", color="red", linewidth=3)
plt.plot(x ,z, "b--", label="$cos(x^2)$")
# 展示图例
plt.legend(loc='best')
plt.show()
[外链图片转存(img-MDRGxRoB-1562729989754)(output_58_0.png)]
刻度及刻度标签
plt.plot(np.random.randn(1000).cumsum())
plt.yticks([-50, -40, -30, -20, -10, 0, 10, 20])
plt.xticks([0, 250, 500, 750, 1000],
['Jan', 'Feb', 'Mar', 'Apr', 'May'],
rotation=30,
fontsize=15
)
plt.title('My first matplotlib plot', fontsize=20)
plt.xlabel('Stages',fontsize=16)
plt.show()
[外链图片转存(img-5zgf34I0-1562729989754)(output_60_0.png)]
散点图
x = np.linspace(0, 2 * np.pi, 50)
y = np.random.random(50)
plt.scatter(x,y)
plt.show()
[外链图片转存(img-uNGrK45M-1562729989759)(output_62_0.png)]
x = np.linspace(0, 2 * np.pi, 50)
y = np.sin(x)
plt.scatter(x,y);
[外链图片转存(img-GxuLZBYp-1562729989760)(output_63_0.png)]
# plot 也可以绘制这张图
plt.plot(x, y,'o')
plt.show()
[外链图片转存(img-ZhSYQ3KY-1562729989761)(output_64_0.png)]
彩色映射散点图
# plt.scatter?
x = np.random.randint(1,100,100)
y = np.random.rand(100)
size = np.random.rand(100) * 500
colour = np.random.rand(100)
plt.rc('figure', figsize=(10, 6))
plt.scatter(x, y, size, colour,
alpha=.7,
linewidths=7
)
plt.colorbar() # 显示色条
plt.show()
[外链图片转存(img-aDup34xt-1562729989762)(output_67_0.png)]
# 自定义标记形状
plt.scatter(x, y, size, colour, marker=r'$\clubsuit$')
plt.colorbar()
plt.show()
[外链图片转存(img-0pWvAHVq-1562729989763)(output_68_0.png)]
柱状图、条形图
# plt.bar?
size = 5
y = np.random.random(size)
x = np.arange(size)
plt.bar(x, y, width=.5)
plt.show()
[外链图片转存(img-eko3YiQc-1562729989763)(output_71_0.png)]
size = 5
a = np.random.random(size)
b = np.random.random(size)
c = np.random.random(size)
d = np.random.random(size)
x = np.arange(size)
total_width, n = 0.9, 3 # 有多少个类型,只需更改n即可
width = total_width / n
x = x - (total_width - width) / 2
plt.bar(x, a, width=width, label='a')
plt.bar(x + width, b, width=width, label='b')
plt.bar(x + 2 * width, c, width=width, label='c')
plt.legend()
plt.show()
[外链图片转存(img-UtmnCvQS-1562729989764)(output_72_0.png)]
# 堆积柱状图
import numpy as np
N = 5
menMeans = (20, 35, 30, 35, 27)
womenMeans = (25, 32, 34, 20, 25)
ind = np.arange(N)
width = 0.35
# p1 = plt.bar(ind, menMeans, width, color='#d62728')
# p2 = plt.bar(ind, womenMeans, width, bottom=menMeans)
p1 = plt.bar(ind, menMeans, width, color='#d62728', label='Men')
p2 = plt.bar(ind, womenMeans, width, bottom=menMeans, label='Wowen')
# print(p1[0])
plt.ylabel('Scores')
plt.title('Scores by group and gender')
plt.xticks(ind, ('G1', 'G2', 'G3', 'G4', 'G5'))
plt.yticks(np.arange(0, 81, 10))
# plt.legend((p1[0], p2[0]), ('Men', 'Women'))
plt.legend()
plt.show()
Rectangle(-0.175,0;0.35x20)
[外链图片转存(img-O9ErDI8O-1562729989765)(output_73_1.png)]
# 带误差的堆积柱状图
import numpy as np
N = 5
menMeans = (20, 35, 30, 35, 27)
womenMeans = (25, 32, 34, 20, 25)
menStd = (2, 3, 4, 1, 2)
womenStd = (3, 5, 2, 3, 3)
ind = np.arange(N)
width = 0.35
p1 = plt.bar(ind, menMeans, width, color='#d62728', yerr=menStd)
p2 = plt.bar(ind, womenMeans, width, bottom=menMeans, yerr=womenStd)
plt.ylabel('Scores')
plt.title('Scores by group and gender')
plt.xticks(ind, ('G1', 'G2', 'G3', 'G4', 'G5'))
plt.yticks(np.arange(0, 81, 10))
plt.legend((p1[0], p2[0]), ('Men', 'Women'))
# plt.legend()
plt.show()
[外链图片转存(img-nXLrSlT9-1562729989766)(output_74_0.png)]
直方图
x = np.random.randn(100)
plt.hist(x, 20)
plt.show()
[外链图片转存(img-E8BCRYCQ-1562729989767)(output_76_0.png)]
x = np.random.randn(100)
plt.hist(x, 20, orientation='horizontal')
plt.show()
[外链图片转存(img-1RPbg4fM-1562729989768)(output_77_0.png)]
# plt.hist?
plt.hist(x, bins=None, range=None, normed=False, weights=None, cumulative=False, bottom=None, histtype=‘bar’, align=‘mid’, orientation=‘vertical’, rwidth=None, log=False, color=None, label=None, stacked=False, hold=None, data=None, **kwargs)
参数 | 说明 |
---|---|
x | 数据 |
bins | 组数 |
histtype | {‘bar’, ‘barstacked’, ‘step’, ‘stepfilled’} |
align | {‘left’, ‘mid’, ‘right’} |
orientation | {‘horizontal’, ‘vertical’} |
rwidth | bar间距 |
x = np.random.randn(1000)
# 水平直方图
# plt.hist(x, 10, rwidth=0.5, orientation='horizontal')
# 垂直直方图
plt.hist(x, 10, rwidth=0.7, orientation='vertical', align='mid')
plt.show()
[外链图片转存(img-tZs2PxOu-1562729989768)(output_80_0.png)]
# mlab.normpdf?
# 返回指定均值和标准差的正态分布的概率分布函数
import matplotlib.mlab as mlab
mu = 100 # 均值
sigma = 15 # 标准差
x = mu + sigma * np.random.randn(1000)
n, bins, patches = plt.hist(x, 50, normed=1)
# 添加拟合曲线
y = mlab.normpdf(bins, mu, sigma)
plt.plot(bins, y, '--')
plt.xlabel('Smarts')
plt.ylabel('Probability density')
plt.title(r'Histogram of IQ: $\mu=100$, $\sigma=15$')
# 调整间距以防止ylabel被覆盖
plt.tight_layout()
plt.show()
[外链图片转存(img-rdsPdCwD-1562729989769)(output_82_0.png)]
plt.tight_layout?
# plt.tight_layout(pad=1.08, h_pad=None, w_pad=None, rect=None)
# pad:子图边框和figure边框的距离,用空白填补
# h_pad、w_pad:子图的纵横边框之间的距离,用空白填补
饼图
labels = 'Frogs', 'Hogs', 'Dogs', 'Logs'
sizes = [15, 30, 45, 10]
explode = (0, 0.1, 0, 0) # 突出'Hogs'
fig1, ax1 = plt.subplots()
ax1.pie(sizes, explode=explode, labels=labels, autopct='%1.1f%%',
shadow=True,
startangle=90
)
# 相等的纵横比确保饼图是圆的
ax1.axis('equal')
plt.show()
[外链图片转存(img-sl0t59DJ-1562729989770)(output_85_0.png)]
箱线图,小提琴图
import pandas as pd
df = pd.read_excel(r'某文化企业收入及支出状况.xls')
df = df.iloc[:,1:]
data = df.values
data
array([[264585.6, 203821. , 192918.4, 10902.6, 63036.3],
[123924.5, 136377.8, 121271.8, 15106. , 75095.1],
[ 47646.1, 219183. , 173521.2, 45661.8, 94748.1],
[178893.4, 197098.2, 146471.1, 50627.1, 28082.7],
[ 45209.3, 119869. , 105013. , 14856.9, 21856.7]])
# plt.violinplot?
fig, axes = plt.subplots(nrows=1, ncols=2, figsize=(14, 4))
# plot violin plot
axes[0].violinplot(data,
# vert=False,
showmeans=True,
showmedians=True
)
axes[0].set_title('Violin plot')
# plot box plot
# axes[1].boxplot(data)
axes[1].boxplot(data, sym='r', meanline=True, showmeans=False)
axes[1].set_title('Box plot')
# adding horizontal grid lines
for ax in axes:
ax.yaxis.grid(True)
ax.set_ylim(0,300000)
ax.set_xticks([y + 1 for y in range(len(data))])
ax.set_xlabel('不同群组')
ax.set_ylabel('观测')
# add x-tick labels
plt.setp(axes, xticks=[y + 1 for y in range(len(data))],
xticklabels=['Assets', 'Revenue', 'Spend', 'Margin', 'Pay'])
plt.show()
[外链图片转存(img-cyapnznR-1562729989771)(output_90_0.png)]
ax.get_ylim()
(0.0, 300000.0)
添加文本,箭头,注解等
plt.arrow?
# plt.arrow(x, y, dx, dy, hold=None, **kwargs)
# ax.annotate("", xy=(0.5, 0.5), xytext=(0, 0),arrowprops=dict(arrowstyle="->"))
x = np.linspace(0, 10, 1000)
y = np.sin(x)
plt.plot(x,y,label="$sin(x)$",color="red",linewidth=3)
plt.text(2,0,'文本在(2,0)这个点', family='Simhei', fontsize=10)
plt.arrow(4, -0.5, 0.5, 0.5) # 4, -0.5, 4.5, 0
plt.annotate("我是注解", xy=(0.5, 0.5), xytext=(1, -0.25),arrowprops=dict(arrowstyle="->"))
plt.show()
[外链图片转存(img-HiT140CZ-1562729989772)(output_94_0.png)]
定制化图表样式
plt.hist(np.random.randn(1000), 10, rwidth=0.5, orientation='vertical', align='mid');
[外链图片转存(img-2nt8mTkt-1562729989772)(output_96_0.png)]
plt.style.use('ggplot') # 使用R中ggplot的配色
plt.hist(np.random.randn(1000), 10, rwidth=0.5, orientation='vertical', align='mid');
[外链图片转存(img-70HFqUaK-1562729989773)(output_97_0.png)]
print(plt.style.available)
['seaborn-dark', 'seaborn-dark-palette', 'seaborn-talk', 'seaborn-ticks', 'seaborn-pastel', 'classic', 'seaborn-poster', 'seaborn-notebook', 'seaborn-bright', 'bmh', 'seaborn-deep', 'seaborn-muted', 'seaborn-paper', 'seaborn-white', 'grayscale', 'seaborn', 'seaborn-whitegrid', 'dark_background', 'fivethirtyeight', 'seaborn-colorblind', 'seaborn-darkgrid', 'ggplot']
plt.style.use('classic')
# plt.style.use('seaborn-dark')
plt.hist(np.random.randn(1000), 10, rwidth=0.5, orientation='vertical', align='mid');
[外链图片转存(img-ZVpKEC55-1562729989774)(output_99_0.png)]
plt.hist(np.random.randn(1000), 10, rwidth=0.5, orientation='vertical', align='mid');
[外链图片转存(img-QKmKtijS-1562729989775)(output_100_0.png)]
# 临时样式
with plt.style.context(('seaborn-ticks')):
plt.plot(np.sin(np.linspace(0, 2 * np.pi)), 'r-o')
[外链图片转存(img-fctDo3HZ-1562729989776)(output_101_0.png)]
plt.plot(np.sin(np.linspace(0, 2 * np.pi)), 'r-o');
[外链图片转存(img-XYwuMKT5-1562729989776)(output_102_0.png)]
热力图
# plt.pcolor?
# 创建一个二维数组的伪色图。
import numpy as np
from pandas import DataFrame
import matplotlib.pyplot as plt
Index= ['aaa', 'bbb', 'ccc', 'ddd', 'eee']
Cols = ['A', 'B', 'C', 'D']
df = DataFrame(abs(np.random.randn(5, 4)), index=Index, columns=Cols)
df.head()
A | B | C | D | |
---|---|---|---|---|
aaa | 0.045805 | 0.195731 | 0.184459 | 1.250486 |
bbb | 0.304711 | 0.612582 | 0.072054 | 0.353929 |
ccc | 0.869858 | 0.376419 | 1.441085 | 0.575023 |
ddd | 2.469467 | 0.813031 | 0.080607 | 0.457312 |
eee | 1.678016 | 0.989024 | 1.757943 | 0.199399 |
plt.pcolor(df)
plt.yticks(np.arange(0.5, len(df.index), 1), df.index)
plt.xticks(np.arange(0.5, len(df.columns), 1), df.columns)
plt.show()
[外链图片转存(img-VkgEUkot-1562729989777)(output_106_0.png)]
import seaborn as sns
sns.heatmap(df, annot=True);
[外链图片转存(img-2ZqiqMIz-1562729989778)(output_107_0.png)]