# 数据可视化matplotlib的应用（四）

import random
import matplotlib.pyplot as plt
from matplotlib import style

style.use('fivethirtyeight')

fig = plt.figure()

def create_plots():
xs = []
ys = []

for i in range(10):
x = i
y = random.randrange(10)

xs.append(x)
ys.append(y)
return xs, ys
ax1 = fig.add_subplot(221)   #通过fig添加子plot（221）解释：第一个参数是行，第二个参数是列，
ax2 = fig.add_subplot(222)   #第三个参数起点。
ax3 = fig.add_subplot(212)

x, y =create_plots()
ax1.plot(x,y)

x, y =create_plots()
ax2.plot(x,y)

x, y =create_plots()
ax3.plot(x,y)

plt.show()

import random
import matplotlib.pyplot as plt
from matplotlib import style

style.use('fivethirtyeight')

fig = plt.figure()

def create_plots():
xs = []
ys = []

for i in range(10):
x = i
y = random.randrange(10)

xs.append(x)
ys.append(y)
return xs, ys
ax1 = plt.subplot2grid((6,1),(0,0),rowspan=1, colspan=1)   #第一个参数(6,1)表示行和列，第二个参数(0,0)坐标
ax2 = plt.subplot2grid((6,1),(1,0),rowspan=4, colspan=1)   #起始值，第三个参数rowspan表示占的行数，第四
ax3 = plt.subplot2grid((6,1),(5,0),rowspan=1, colspan=1)   #个参数colspan表示列占。

x, y =create_plots()
ax1.plot(x,y)

x, y =create_plots()
ax2.plot(x,y)

x, y =create_plots()
ax3.plot(x,y)

plt.show()

3.再次应用子plot

import matplotlib.pyplot as plt
import matplotlib.dates as mdates
import matplotlib.ticker as mticker
from matplotlib.finance import candlestick_ohlc
from matplotlib import style

import numpy as np
import urllib
import datetime as dt

style.use('fivethirtyeight')
print(plt.style.available)

print(plt.__file__)

def bytespdate2num(fmt, encoding='utf-8'):
strconverter = mdates.strpdate2num(fmt)
def bytesconverter(b):
s = b.decode(encoding)
return strconverter(s)
return bytesconverter

def graph_data(stock):
fig = plt.figure()
ax1 = plt.subplot2grid((6,1), (0,0),rowspan=1,colspan=1)
plt.title(stock)
ax2 = plt.subplot2grid((6,1), (1,0),rowspan=4,colspan=1)
plt.xlabel('Date')
plt.ylabel('Price')
ax3 = plt.subplot2grid((6,1), (5,0),rowspan=1,colspan=1)

stock_price_url = 'http://chartapi.finance.yahoo.com/instrument/1.0/'+stock+'/chartdata;type=quote;range=1m/csv'
source_code = urllib.request.urlopen(stock_price_url).read().decode()
stock_data = []
split_source = source_code.split('\n')
for line in split_source:
split_line = line.split(',')
if len(split_line) == 6:
if 'values' not in line and 'labels' not in line:
stock_data.append(line)

date, closep, highp, lowp, openp, volume = np.loadtxt(stock_data,
delimiter=',',
unpack=True,
converters={0: bytespdate2num('%Y%m%d')})
x = 0
y = len(date)
ohlc = []

while x < y:
append_me = date[x], openp[x], highp[x], lowp[x], closep[x], volume[x]
ohlc.append(append_me)
x+=1

candlestick_ohlc(ax2, ohlc, width=0.4, colorup='#77d879', colordown='#db3f3f')

for label in ax1.xaxis.get_ticklabels():
label.set_rotation(45)

ax2.xaxis.set_major_formatter(mdates.DateFormatter('%Y-%m-%d'))
ax2.xaxis.set_major_locator(mticker.MaxNLocator(10))
ax2.grid(True)

bbox_props = dict(boxstyle='round',fc='w', ec='k',lw=1)

ax2.annotate(str(closep[-1]), (date[-1], closep[-1]),
xytext = (date[-1]+4, closep[-1]), bbox=bbox_props)

##    # Annotation example with arrow
##    ax1.annotate('Bad News!',(date[11],highp[11]),
##                 xytext=(0.8, 0.9), textcoords='axes fraction',
##                 arrowprops = dict(facecolor='grey',color='grey'))
##
##
##    # Font dict example
##    font_dict = {'family':'serif',
##                 'color':'darkred',
##                 'size':15}
##    # Hard coded text
##    ax1.text(date[10], closep[1],'Text Example', fontdict=font_dict)

#plt.legend()
plt.subplots_adjust(left=0.11, bottom=0.24, right=0.90, top=0.90, wspace=0.2, hspace=0)
plt.show()

graph_data('EBAY')

import matplotlib.pyplot as plt
import matplotlib.dates as mdates
import matplotlib.ticker as mticker
from matplotlib.finance import candlestick_ohlc
from matplotlib import style
import numpy as np
import urllib
import datetime as dt

style.use('fivethirtyeight')
print(plt.style.available)

print(plt.__file__)

MA1 = 10     #计算moving_average时，设置的参数
MA2 = 30     #MA就是moving_average的缩写

def moving_average(values, window):
weights = np.repeat(1.0, window)/window #设置参数repeat重复表示参数
smas = np.convolve(values, weights, 'valid') #参数按照权重卷积运算
return smas

def high_minus_low(highs, lows): #计算highs和lows的差值
return highs-lows

def bytespdate2num(fmt, encoding='utf-8'):
strconverter = mdates.strpdate2num(fmt)
def bytesconverter(b):
s = b.decode(encoding)
return strconverter(s)
return bytesconverter

def graph_data(stock):

fig = plt.figure()
ax1 = plt.subplot2grid((6,1), (0,0), rowspan=1, colspan=1)
plt.title(stock)
ax2 = plt.subplot2grid((6,1), (1,0), rowspan=4, colspan=1)
plt.xlabel('Date')
plt.ylabel('Price')
ax3 = plt.subplot2grid((6,1), (5,0), rowspan=1, colspan=1)

stock_price_url = 'http://chartapi.finance.yahoo.com/instrument/1.0/'+stock+'/chartdata;type=quote;range=1y/csv'
source_code = urllib.request.urlopen(stock_price_url).read().decode()
stock_data = []
split_source = source_code.split('\n')
for line in split_source:
split_line = line.split(',')
if len(split_line) == 6:
if 'values' not in line and 'labels' not in line:
stock_data.append(line)

date, closep, highp, lowp, openp, volume = np.loadtxt(stock_data,
delimiter=',',
unpack=True,
converters={0: bytespdate2num('%Y%m%d')})

x = 0
y = len(date)
ohlc = []

while x < y:
append_me = date[x], openp[x], highp[x], lowp[x], closep[x], volume[x]
ohlc.append(append_me)
x+=1

ma1 = moving_average(closep,MA1)
ma2 = moving_average(closep,MA2)
start = len(date[MA2-1:])

h_l = list(map(high_minus_low, highp, lowp)) #计算出差值列表

ax1.plot_date(date,h_l,'-') #画出差值的函数，在第一个子plot里面

candlestick_ohlc(ax2, ohlc, width=0.4, colorup='#77d879', colordown='#db3f3f')

for label in ax2.xaxis.get_ticklabels():
label.set_rotation(45)

ax2.xaxis.set_major_formatter(mdates.DateFormatter('%Y-%m-%d'))
ax2.xaxis.set_major_locator(mticker.MaxNLocator(10))
ax2.grid(True)

bbox_props = dict(boxstyle='round',fc='w', ec='k',lw=1)

ax2.annotate(str(closep[-1]), (date[-1], closep[-1]),
xytext = (date[-1]+4, closep[-1]), bbox=bbox_props)

ax3.plot(date[-start:], ma1[-start:])     #第三个图画出变化的图
ax3.plot(date[-start:], ma2[-start:])

plt.subplots_adjust(left=0.11, bottom=0.24, right=0.90, top=0.90, wspace=0.2, hspace=0)
plt.show()

graph_data('EBAY')

• 本文已收录于以下专栏：

## 样式美化(matplotlib.pyplot.style.use)

• You_are_my_dream
• 2016年12月05日 13:59
• 4013

## 数据分析-文件中CSV分析和matplotlib的一些应用

import matplotlib.pyplot as plt import csv x = [] y = [] with open('data.csv','r') as csvfile...
• juezhanangle
• 2016年12月27日 21:36
• 1136

## Python 数据科学入门教程：Matplotlib

Matplotlib 入门教程 来源：Introduction to Matplotlib and basic line 译者：飞龙 协议：CC BY-NC-SA 4.0 ...
• wizardforcel
• 2017年01月13日 11:45
• 18753

## Matplotlib 入门教程

• ff_smile
• 2017年09月25日 14:22
• 75

## 数据可视化——Matplotlib模块入门（一）

• u014607457
• 2016年04月27日 12:12
• 3595

## 数据可视化-Python之Matplotlib

• theking_1991
• 2014年03月12日 20:31
• 1680

## fmt 国际化 日期 数字 本地环境 字符编码 本地资源

• daisyleedq
• 2016年05月12日 11:23
• 648

## Matplotlib入门教程

Matplotlib 入门教程
• Sunny_csdn11
• 2017年12月16日 14:31
• 66

## 数据可视化matplotlib的应用

1.plot折线图：     import matplotlib.pyplot as plt x = [1,2,3] y = [5,7,4] x2 = [1,2,3] y2 =[10,14,12]...
• juezhanangle
• 2016年12月29日 16:00
• 249

## Python科学计算数据可视化模块-Matplotlib

Matplotlibpython科学计算系列 matplotlib 是python最著名的绘图库，它提供了一整套和matlab相似的命令API，十分适合交互式地进行制图。而且也可以方便地将它作为绘图...
• baibaibai66
• 2016年04月27日 14:13
• 2991

举报原因： 您举报文章：数据可视化matplotlib的应用（四） 色情 政治 抄袭 广告 招聘 骂人 其他 (最多只允许输入30个字)