Python基础机器学习库Matplotlib简明教程

一条鱼 2018-09-04

Python基础机器学习库Matplotlib简明教程

Matplotlib是Python首先可视化包(Plotly除外)!它允许您使用Python代码创建显示数据的丰富图像。

本文将重点关注两个对象:图和轴。

安装

打开命令行并输入

pip install matplotlib

我鼓励所有用户下载 Anaconda的Python发行版,这些软件已经安装了所有数学和科学库。

介绍

Matplotlib分为两个主要部分:Pyplot API(快速生产的可视化功能)和面向对象的API(更灵活,更健壮)。

我们将重点关注后者。

导入Python库

import matplotlib.pyplot as plt

import numpy as np

创建

为了实现可视化,您需要创建两个对象,一个接着一个。首先创建一个Figure 对象,然后从中创建一个Axes 对象。然后,通过调用方法创建所有可视化细节。Python代码如下:

# Figure is a blank canvas

fig = plt.figure(figsize=(8,5), dpi=100) # 800x500 pixel image

# Add axes at specific position (fractions of fig width and height)

position = [0.1, 0.1, 0.8, 0.8] # left, bottom, width, height

axes = fig.add_axes(position)

有关Figure对象的一些注意事项:

  • figsize和dpi参数是可选的
  • figsize是图形的宽度和高度,单位为英寸
  • dpi:是每英寸点数(每英寸像素数)

有关add_axes方法的一些注意事项:

  • axes 的位置只能以图形大小的部分来指定
  • 您可以将许多其他参数传递给此方法

绘制

现在我们将创建一些简单的数据,绘制它们,标记图形,并将其保存到我们的Python代码所在的目录中。

# Create data

x = np.array([1,2,3,4,5,6])

y = np.array([1,4,9,16,25,36])

# Plot a line

axes.plot(x, y, label="growth") # label keyword used later!

axes.set_xlabel('X Axis')

axes.set_ylabel('Y Axis')

axes.set_title("Simple Line")

# Save the image

fig.savefig("file1.jpg")

这是结果图像:

Python基础机器学习库Matplotlib简明教程

更进一步

添加图例的最佳方法是在Axes对象上调用plot方法时包含label关键字(正如我们在上面的代码中看到的那样)。然后你可以通过调用另一种方法制作一个图例并选择它的位置。

# Location options: 0 = Auto Best Fit, 1 = Upper Right, 2 = Lower Right,

# 3 = Lower Left, 4 = Lower Right

axes.legend(loc=0)

# Save the image

fig.savefig("file2.jpg")

这是结果图像:

Python基础机器学习库Matplotlib简明教程

颜色和线条

您可以通过将某些关键字参数传递到plot方法来控制线的要素。一些最常用的关键字是:

  • color:传递名称(“b”, “blue”, “r”, “red”等)或十六进制代码(“#1155dd”,“15cc55”)
  • alpha:线条的透明度
  • linewidth
  • linestyle:行的模式(‘-’, ‘-.’, ‘:’, ‘steps’)
  • marker:行上每个数据点的模式(‘+’, ‘o’, ‘*’, ‘s’, ‘,’, ‘.’)
  • markersize

# Use the keywords in the plot method

benchmark_data = [5,5,5,5,5,5]

axes.plot(x, benchmark_data, label="benchmark", color="r", alpha=.5, linewidth=1, linestyle ='-', marker='+', markersize=4)

axes.legend(loc=0)

# Save the image

fig.savefig("file3.jpg")

这是结果图像:

Python基础机器学习库Matplotlib简明教程

轴范围和刻度线

Python示例代码如下:

# Control the range of the axes

axes.set_xlim([1, 6])

axes.set_ylim([1, 50]) # increasing y axis maximum to 50, instead of 35

#axes.axis("tight") # to get auto tight fitted axes, do this

# Control the tick lines

axes.set_xticks([1, 2, 3, 4, 5, 6])

axes.set_yticks([0, 25, 50])

# Control the labels of the tick lines

axes.set_xticklabels(["2018-07-0{0}".format(d) for d in range(1,7)])

axes.set_yticklabels([0, 25, 50])

axes.legend(loc=0)

fig.savefig("file4.jpg")

这是结果图像:

Python基础机器学习库Matplotlib简明教程

Subplots

到目前为止,我们已经创建了一个只有一个图形的Figure对象。可以在一个图中一次创建多个图形。我们可以使用subplots函数来完成此操作。

# 2 graphs side by side

fig1, axes1 = plt.subplots(nrows=1, ncols=2, figsize=(8,5), dpi=100))

# Set up first graph

axes1[0].plot(x, x**2, color='r')

axes1[0].set_xlabel("x")

axes1[0].set_ylabel("y")

axes1[0].set_title("Squared")

# Set up second graph

axes1[1].plot(x, x**3, color='b')

axes1[1].set_xlabel("x")

axes1[1].set_ylabel("y")

axes1[1].set_title("Cubed")

# Automatically adjust the positions of the axes so there is no overlap

fig1.tight_layout()

fig1.savefig("file5.jpg")

这是结果图像:

Python基础机器学习库Matplotlib简明教程

应用

我们将获得了比特币的数据,并根据30天的平均价格创建了何时购买和交易的信号。我们可以使用Matplotlib中的新知识来可视化这些数据。

你需要一个Quandl帐户和python Quandl库。

pip install quandl

获取数据的Python代码:

import quandl

import pandas as pd

# set up the Quandl connection

api_key = 'GETYOURAPIKEY'

quandl.ApiConfig.api_key = api_key

quandl_code = "BITSTAMP/USD"

# get the data from the API

bitcoin_data = quandl.get(quandl_code, start_date="2017-01-01", end_date="2018-01-17", returns="numpy")

# set up the data in pandas

df = pd.DataFrame(data=bitcoin_data, columns=['Date', 'High', 'Low', 'Last', 'Bid', 'Ask', 'Volume', 'VWAP'])

# make the 'Date' column the index

df.set_index('Date', inplace=True)

# find a rolling 30 day average

df['RollingMean'] = df['Last'].rolling(window=30).mean().shift(1)

# label when the last price is less than L30D average

df['Buy'] = df['Last'] < df['RollingMean']

# create a strategic trading DataFrame

trading_info = df.loc[:,['Last', 'RollingMean', 'Buy']]

可视化比特币数据的Python代码:

import matplotlib.pyplot as plt

# make figure

fig = plt.figure(figsize=(8,5), dpi=100)

# add axes at specific position

position = [0.1, 0.1, 0.8, 0.8]

axes = fig.add_axes(position)

# plot the bitcoin data

num_days = trading_info.index.size

x = range(num_days)

y = trading_info['Last']

axes.plot(x, y, label="Price", color="b") # label keyword used later!

axes.set_xlabel('Date')

axes.set_ylabel('Price')

axes.set_title("Bitcoin Price")

# plot the rolling mean

axes.plot(x, trading_info['RollingMean'], label="Rolling Mean", color="r", alpha=.5, linewidth=1, linestyle ='-')

# set up the legend

axes.legend(loc=0)

# set up the date tick marks

x_ticks_index = range(0, num_days, 100)

x_ticks_labels = [str(trading_info.index[indx])[0:10] for indx in x_ticks_index]

axes.set_xticks(x_ticks_index)

axes.set_xticklabels(x_ticks_labels)

# save the image

fig.savefig("Bitcoin.jpg")

这是结果图像:

Python基础机器学习库Matplotlib简明教程

Matplotlib!使用真实数据快速,灵活且易于可视化。但是,如果我们想用比30天滚动平均值更复杂的数据来分析数据呢?每个面向Python数据的程序员需要知道的最后一个机器学习库是Scikit-Learn。

相关推荐