python使用matplotlib可视化

导入matplotlib

import matplotlib as mpl
import matplotlib.pyplot as plt

设置样式
plt.style.use('classic')

show()在什么时候用

在脚本文件里绘图 需要使用plt.show()

# ------- file: myplot.py ------
import matplotlib.pyplot as plt
import numpy as np

x = np.linspace(0, 10, 100)

plt.plot(x, np.sin(x))
plt.plot(x, np.cos(x))

plt.show()

$ python myplot.py

在ipython命令行里绘图

In [1]: %matplotlib
Using matplotlib backend: TkAgg

In [2]: import matplotlib.pyplot as plt

在笔记本里绘图
%matplotlib notebook
will lead to interactive plots embedded within the notebook
%matplotlib inline
will lead to static images of your plot embedded in the notebook

存储图片到文件

fig.savefig('my_figure.png')
#查看所有的图片
from IPython.display import Image
Image('my_figure.png')

绘画线形

%matplotlib inline
import matplotlib.pyplot as plt
plt.style.use('seaborn-whitegrid')
import numpy as np

fig = plt.figure()
ax = plt.axes()
x = np.linspace(0, 10, 1000)
ax.plot(x, np.sin(x));
plt.plot(x, np.sin(x));

#调整线形和颜色
plt.plot(x, np.sin(x - 0), color='blue')        # specify color by name
plt.plot(x, np.sin(x - 1), color='g')           # short color code (rgbcmyk)
plt.plot(x, np.sin(x - 2), color='0.75')        # Grayscale between 0 and 1
plt.plot(x, x + 0, linestyle='solid')
plt.plot(x, x + 1, linestyle='dashed')
plt.plot(x, x + 4, linestyle='-')  # solid
plt.plot(x, x + 5, linestyle='--') # dashed
plt.plot(x, x + 6, linestyle='-.') # dashdot
plt.plot(x, x + 7, linestyle=':');  # dotted
plt.plot(x, x + 0, '-g')  # solid green
plt.plot(x, x + 1, '--c') # dashed cyan

#调整轴
plt.xlim(-1, 11)
plt.ylim(-1.5, 1.5);
plt.axis('tight');

#增加标签
plt.title("A Sine Curve")
plt.xlabel("x")
plt.ylabel("sin(x)");

#也可以同时设置
ax = plt.axes()
ax.plot(x, np.sin(x))
ax.set(xlim=(0, 10), ylim=(-2, 2),
       xlabel='x', ylabel='sin(x)',
       title='A Simple Plot');

简单的散点图

%matplotlib inline
import matplotlib.pyplot as plt
plt.style.use('seaborn-whitegrid')
import numpy as np

x = np.linspace(0, 10, 30)
y = np.sin(x)

plt.plot(x, y, 'o', color='black');
plt.scatter(x, y, marker='o');

错误可视化

离散偏差

%matplotlib inline
import matplotlib.pyplot as plt
plt.style.use('seaborn-whitegrid')
import numpy as np

x = np.linspace(0, 10, 50)
dy = 0.8
y = np.sin(x) + dy * np.random.randn(50)

plt.errorbar(x, y, yerr=dy, fmt='.k');

连续差

plt.plot(xdata, ydata, 'or')
plt.plot(xfit, yfit, '-', color='gray')

plt.fill_between(xfit, yfit - dyfit, yfit + dyfit,
                 color='gray', alpha=0.2)
plt.xlim(0, 10);

密度图和等高线图

%matplotlib inline
import matplotlib.pyplot as plt
plt.style.use('seaborn-white')
import numpy as np

x = np.linspace(0, 5, 50)
y = np.linspace(0, 5, 40)

X, Y = np.meshgrid(x, y)
Z = f(X, Y)
plt.contour(X, Y, Z, colors='black');
plt.contour(X, Y, Z, 20, cmap='RdGy');
plt.contourf(X, Y, Z, 20, cmap='RdGy')
plt.colorbar();

#类似于matlab contourf imshow 

直方图,密度图,条形图

plt.hist(data);
plt.hist(data, bins=30, normed=True, alpha=0.5,
         histtype='stepfilled', color='steelblue',
         edgecolor='none');
#分幅
x1 = np.random.normal(0, 0.8, 1000)
x2 = np.random.normal(-2, 1, 1000)
x3 = np.random.normal(3, 2, 1000)
kwargs = dict(histtype='stepfilled', alpha=0.3, normed=True, bins=40)

plt.hist(x1, **kwargs)
plt.hist(x2, **kwargs)
plt.hist(x3, **kwargs);

二维直方图

plt.hist2d(x, y, bins=30, cmap='Blues')
counts, xedges, yedges = np.histogram2d(x, y, bins=30)

六边形图

plt.hexbin(x, y, gridsize=30, cmap='Blues')
cb = plt.colorbar(label='count in bin')

核密度图

定制标注

x = np.linspace(0, 10, 1000)
fig, ax = plt.subplots()
ax.plot(x, np.sin(x), '-b', label='Sine')
ax.plot(x, np.cos(x), '--r', label='Cosine')
ax.axis('equal')
leg = ax.legend();
#调整位置
ax.legend(loc='upper left', frameon=False)
fig
#标注分为两列
ax.legend(frameon=False, loc='lower center', ncol=2)
fig

#给标注增加一个背景,有边缘阴影
ax.legend(fancybox=True, framealpha=1, shadow=True, borderpad=1)
fig

#更多请查看帮助

定制颜色条

plt.colorbar();
plt.imshow(I, cmap='gray');

cmap的色系
viridis
cubehelix
RdBu
jet

多个子图绘制

%matplotlib inline
import matplotlib.pyplot as plt
plt.style.use('seaborn-white')
import numpy as np
#不同的水平轴
ax1 = plt.axes()  # standard axes
ax2 = plt.axes([0.65, 0.65, 0.2, 0.2])

#通过在图上增加水平坐标轴分幅
fig = plt.figure()
ax1 = fig.add_axes([0.1, 0.5, 0.8, 0.4],
                   xticklabels=[], ylim=(-1.2, 1.2))
ax2 = fig.add_axes([0.1, 0.1, 0.8, 0.4],
                   ylim=(-1.2, 1.2))

x = np.linspace(0, 10)
ax1.plot(np.sin(x))
ax2.plot(np.cos(x));
14391893-b67c553e3033108a.png
image.png
14391893-5bec805b0b30e5ae.png
image.png

plt.subplot 简单的分图

for i in range(1, 7):
    plt.subplot(2, 3, i)
    plt.text(0.5, 0.5, str((2, 3, i)),
             fontsize=18, ha='center')
#一个图一个图的增加
fig = plt.figure()
fig.subplots_adjust(hspace=0.4, wspace=0.4)
for i in range(1, 7):
    ax = fig.add_subplot(2, 3, i)
    ax.text(0.5, 0.5, str((2, 3, i)),
           fontsize=18, ha='center')

plt.subplots 里整个分图在一个坐标

fig, ax = plt.subplots(2, 3, sharex='col', sharey='row')
![image.png](https://upload-images.jianshu.io/upload_images/14391893-0066147cccccdb32.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

plt.GridSpec: More Complicated

grid = plt.GridSpec(2, 3, wspace=0.4, hspace=0.3)

14391893-a933bd82e3108691.png
image.png

文本和注释

ax.text('2012-1-1', 3950, "New Year's Day", **style)
# transform=ax.transData is the default, but we'll specify it anyway
ax.text(1, 5, ". Data: (1, 5)", transform=ax.transData)
ax.text(0.5, 0.1, ". Axes: (0.5, 0.1)", transform=ax.transAxes)
ax.text(0.2, 0.2, ". Figure: (0.2, 0.2)", transform=fig.transFigure

箭头和注释

%matplotlib inline

fig, ax = plt.subplots()

x = np.linspace(0, 20, 1000)
ax.plot(x, np.cos(x))
ax.axis('equal')

ax.annotate('local maximum', xy=(6.28, 1), xytext=(10, 4),
            arrowprops=dict(facecolor='black', shrink=0.05))

ax.annotate('local minimum', xy=(5 * np.pi, -1), xytext=(2, -6),
            arrowprops=dict(arrowstyle="->",
                            connectionstyle="angle3,angleA=0,angleB=-90"));

设置刻度

#放缩
ax = plt.axes(xscale='log', yscale='log')
#隐藏刻度
ax.yaxis.set_major_locator(plt.NullLocator())
ax.xaxis.set_major_formatter(plt.NullFormatter())
#增加或者减小刻度数量
axi.xaxis.set_major_locator(plt.MaxNLocator(3))
    axi.yaxis.set_major_locator(plt.MaxNLocator(3))

#其他刻度格式
ax.xaxis.set_major_locator(plt.MultipleLocator(np.pi / 2))
![image.png](https://upload-images.jianshu.io/upload_images/14391893-abbf6d7f1b440631.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

其他知识

Summary of Formatters and Locators

We've mentioned a couple of the available formatters and locators.
We'll conclude this section by briefly listing all the built-in locator and formatter options. For more information on any of these, refer to the docstrings or to the Matplotlib online documentaion.
Each of the following is available in the plt namespace:

Locator class Description
NullLocator No ticks
FixedLocator Tick locations are fixed
IndexLocator Locator for index plots (e.g., where x = range(len(y)))
LinearLocator Evenly spaced ticks from min to max
LogLocator Logarithmically ticks from min to max
MultipleLocator Ticks and range are a multiple of base
MaxNLocator Finds up to a max number of ticks at nice locations
AutoLocator (Default.) MaxNLocator with simple defaults.
AutoMinorLocator Locator for minor ticks
Formatter Class Description
NullFormatter No labels on the ticks
IndexFormatter Set the strings from a list of labels
FixedFormatter Set the strings manually for the labels
FuncFormatter User-defined function sets the labels
FormatStrFormatter Use a format string for each value
ScalarFormatter (Default.) Formatter for scalar values
LogFormatter Default formatter for log axes

We'll see further examples of these through the remainder of the book.

配置和样式

plt.rc 的意思就是 configuration配置的意思。
调整样式:

#可获得的样式
plt.style.available[:5]
#使用某种样式
with plt.style.context('stylename'):
    make_a_plot()
with plt.style.context('ggplot'):
    hist_and_lines()
with plt.style.context('bmh'):
    hist_and_lines()
with plt.style.context('dark_background'):
    hist_and_lines()
with plt.style.context('grayscale'):
    hist_and_lines()
import seaborn
hist_and_lines()

猜你喜欢

转载自blog.csdn.net/weixin_34221276/article/details/86928403