Python绘图教程
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')