Python绘图教程

时间:2020-02-23 14:43:09  来源:igfitidea点击:

Plotly(网址为Plot.ly)是一家位于蒙特利尔的技术计算。
它以为个人或者开发和提供在线分析,统计和绘图工具而闻名。
它还为Arduino,Julia,MATLAB,Perl,Python,R和REST开发/提供科学的图形库。

Python Plotly库

Plotly的Python图形库可在线生成交互式图形,并允许我们根据需要将其离线保存。

为什么使用Plotly

Plotly具有一些惊人的功能,使其比其他图形库更好:

  • 默认情况下是交互式的
  • 图表不保存为图像,而是序列化为JSON,使其易于使用R,MATLAB,Julia等读取
  • 导出矢量以进行打印/发布
  • 易于操作/嵌入网络

入门

我们需要PIP(python软件包安装程序)才能开始使用plotly,如果需要使用在线工具,我们还需要使用plotly创建一个帐户。
在本程序中,我们将仅坚持离线使用。

安装Plotly

要以图形方式安装,请打开一个终端窗口并运行以下命令:

sudo pip install plotly

安装可能需要几分钟来收集依赖关系并下载它们:

使用Plotly

要在任何Python脚本中使用plotly,我们需要将plotly导入为:

import plotly

再执行几步,就可以使用plot。
对于在线使用,您需要设置凭据。
可以这样完成:

plotly.tools.set_credentials_file(username='YourUsernameHere', api_key='YourAPIkeyHere')

对于脱机使用,我们需要调用如下图来进行脱机使用:

plotly.offline.plot()

测试安装

在开始使用plotly之前,让我们通过一个简单的脚本测试其安装:

import plotly
print(plotly.__version__)

制作简单图形

让我们从一个带有示例代码段的简单" Hello,World"程序开始:

import plotly
from plotly.graph_objs import Scatter, Layout

plotly.offline.plot({
  "data": [Scatter(x=[1, 2, 3, 4], y=[4, 3, 2, 1])],
  "layout": Layout(title="hello world")
})

基本图表

为了开始可视化数据,我们将从使用Plotly的基本图表开始,然后转到显示与时间有关的绘图的更复杂的示例。

散点图

我们将使用numpy根据一些随机数据创建一个基本图表。
如果您的计算机上未安装numpy,请使用以下命令进行安装:

pip install numpy

这是显示散点图的示例程序:

import plotly
import plotly.graph_objs as go

# Create random data with numpy
import numpy as np

N = 1000
random_x = np.random.randn(N)
random_y = np.random.randn(N)

# Create a trace
trace = go.Scatter(
  x = random_x,
  y = random_y,
  mode = 'markers'
)
data = [trace]

# Plot and embed in ipython notebook!
plotly.offline.plot(data, filename='basic-scatter')

线和散点图

我们可以按照与上述类似的方式创建一些更复杂/更有用的图,例如线散布图:

import plotly
import plotly.graph_objs as go

# Create random data with numpy
import numpy as np

N = 100
random_x = np.linspace(0, 1, N)
random_y0 = np.random.randn(N)+5
random_y1 = np.random.randn(N)
random_y2 = np.random.randn(N)-5

# Create traces
trace0 = go.Scatter(
  x = random_x,
  y = random_y0,
  mode = 'markers',
  name = 'markers'
)

trace1 = go.Scatter(
  x = random_x,
  y = random_y1,
  mode = 'lines+markers',
  name = 'lines+markers'
)

trace2 = go.Scatter(
  x = random_x,
  y = random_y2,
  mode = 'lines',
  name = 'lines'
)

data = [trace0, trace1, trace2]
plotly.offline.plot(data, filename='scatter-mode')

该图比现在看起来具有更多的信息。
将鼠标指针移至任意绘制的点,您将看到有关该点的更多信息:

箱形图

箱形图非常有用,特别有用,尤其是当您从很少的数据中显示太多内容时。
让我们尝试创建一个:

import random
import plotly
from numpy import *

N = 30.     # Number of boxes

# generate an array of rainbow colors by fixing the saturation and lightness of the HSL representation of colour
# and marching around the hue.
c = ['hsl('+str(h)+',50%'+',50%)' for h in linspace(0, 360, N)]

# Each box is represented by a dict that contains the data, the type,
# and the colour.
# Use list comprehension to describe N boxes, each with a different colour and
# with different randomly generated data:
data = [{
  'y': 3.5*sin(pi * i/N) + i/N+(1.5+0.5*cos(pi*i/N))*random.rand(10),
  'type':'box',
  'marker':{'color': c[i]}
  } for i in range(int(N))]

# format the layout
layout = {'xaxis': {'showgrid':False,'zeroline':False, 'tickangle':60,'showticklabels':False},
        'yaxis': {'zeroline':False,'gridcolor':'white'},
        'paper_bgcolor': 'rgb(233,233,233)',
        'plot_bgcolor': 'rgb(233,233,233)',
        }

plotly.offline.plot(data)

等高线图

轮廓图是最常用的科学图之一:

from plotly import tools
import plotly
import plotly.graph_objs as go

trace0 = go.Contour(
  z=[[2, 4, 7, 12, 13, 14, 15, 16],
     [3, 1, 6, 11, 12, 13, 16, 17],
     [4, 2, 7, 7, 11, 14, 17, 18],
     [5, 3, 8, 8, 13, 15, 18, 19],
     [7, 4, 10, 9, 16, 18, 20, 19],
     [9, 10, 5, 27, 23, 21, 21, 21],
     [11, 14, 17, 26, 25, 24, 23, 22]],
  line=dict(smoothing=0),
)

trace1 = go.Contour(
  z=[[2, 4, 7, 12, 13, 14, 15, 16],
     [3, 1, 6, 11, 12, 13, 16, 17],
     [4, 2, 7, 7, 11, 14, 17, 18],
     [5, 3, 8, 8, 13, 15, 18, 19],
     [7, 4, 10, 9, 16, 18, 20, 19],
     [9, 10, 5, 27, 23, 21, 21, 21],
     [11, 14, 17, 26, 25, 24, 23, 22]],
  line=dict(smoothing=0.85),
)

data = tools.make_subplots(rows=1, cols=2,
                        subplot_titles=('Without Smoothing', 'With Smoothing'))

data.append_trace(trace0, 1, 1)
data.append_trace(trace1, 1, 2)

plotly.offline.plot(data)

财务图表

金融图表的mycg阅读起来比较复杂,但使用Plotly可以轻松制作。
让我们看一下可以用Plotly制作的某些类型的图表。

时间序列图

让我们从时间序列图开始。
我们将利用Github存储库提供的Plotly本身的示例数据。
这是一个示例程序:

import plotly
import plotly.graph_objs as go
import pandas as pd

df = pd.read_csv("https://raw.githubusercontent.com/plotly/datasets/master/finance-charts-apple.csv")

data = [go.Scatter(
        x=df.Date,
        y=df['AAPL.Close'])]

plotly.offline.plot(data)

让我们看一下该程序的输出:如果您的计算机上未安装pandas,请使用以下命令进行安装:

pip install pandas

OHLC图表

OHLC图表还是解释时间序列相关数据非均匀分布的绝佳方法。
让我们看一下代码片段:

import plotly
import plotly.graph_objs as go
from datetime import datetime

open_data = [33.0, 33.3, 33.5, 33.0, 34.1]
high_data = [33.1, 33.3, 33.6, 33.2, 34.8]
low_data = [32.7, 32.7, 32.8, 32.6, 32.8]
close_data = [33.0, 32.9, 33.3, 33.1, 33.1]

dates = [datetime(year=2013, month=10, day=10),
       datetime(year=2013, month=11, day=10),
       datetime(year=2013, month=12, day=10),
       datetime(year=2014, month=1, day=10),
       datetime(year=2014, month=2, day=10)]

trace = go.Ohlc(x=dates,
              open=open_data,
              high=high_data,
              low=low_data,
              close=close_data)
data = [trace]

plotly.offline.plot(data, filename='ohlc_datetime')