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")
这是结果图像:
更进一步
添加图例的最佳方法是在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")
这是结果图像:
颜色和线条
您可以通过将某些关键字参数传递到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示例代码如下:
# 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")
这是结果图像:
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")
这是结果图像:
应用
我们将获得了比特币的数据,并根据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")
这是结果图像:
Matplotlib!使用真实数据快速,灵活且易于可视化。但是,如果我们想用比30天滚动平均值更复杂的数据来分析数据呢?每个面向Python数据的程序员需要知道的最后一个机器学习库是Scikit-Learn。