一、 基础点
# 网格线
"""
plt.grid() # 全部展示
plt.grid(1) # 显示网格线 1=True=默认显示;0=False=不显示
plt.grid(b=True) # 1=True=默认显示;0=False=不显示
plt.grid(b=True, axis='x') #只显示x轴网格线 (axis in ['x', ''y','both'] 对应显示网格线)
plt.grid(b=1, which='major') # which 默认就是major, 边界展示both minor则不显示网格(去除网格)
alpha=.3 # 透明度
"""
# x ,y轴设置
"""
plt.xlim() ylim()函数 设置x轴y轴范围坐标
plt.xlim(50, 750) # x轴
plt.ylim(50, 750) # y轴
xticks()函数设置X轴方法--刻度、标签
plt.xticks(
xtick_location, xtick_labels, rotation=60,fontsize=12,horizontalalignment='center', alpha=.7
)
# xtick_location :刻度
# xtick_labels : 标签
# rotation : 倾斜度
# fontsize : 字体大小
# horizontalalignment : 水平对齐
# alpha : 透明度
# xlabel 坐标轴标签
plt.xlabel("时间")
plt.ylabel("收益率")
plt.xlabel(x_label, position= [1, 1])
"""
# 图例
"""
legend = plt.legend([p1, p2], ["BJ", "SH"])
loc: 位置
title: 标题
frameon=False # 去掉图例边框
edgecolor: 图例边框颜色
facecolor: #背景颜色
"""
# 解决中文显示问题
"""
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False
"""
# 注释文本
"""
text表示注释文本,xy表示箭头端点位置,xytext表示文本注释的位置,arrowprops控制箭头,形式为字典
plt.text(x = 1,y = 0.5,s = '这是标注',fontsize = 15,c = 'b',rotation = 20)
plt.annotate(
text = '描述文字',xy = (4.65,-1), xytext = (4.2,0),
arrowprops = {'headwidth':10,'facecolor':'g'},fontsize = 15)
"""
# 绘图填充
"""
plt.fill_between()
# 第一个参数表示要覆盖的左右范围,第二个参数表示覆盖的下限,第三个参数表示覆盖的上限,在这里则表示填充y1曲线和y2曲线中间的区域
plt.fill_between(x,y1,y2,facecolor = 'k',alpha = 0.2)
"""
# 画框及打标签
"""
# 画框
current_axis = plt.gca()
current_axis.add_patch(plt.Rectangle(
(xmin, ymin), xmax-xmin, ymax-ymin,
color='green', fill=False, linewidth=2
)
)
# 打标签 label是想要打的标签名
current_axis.text(
xmin, ymin, 'label', size='x-large',
color='white',
bbox={'facecolor':'green', 'alpha':1.0}
)
# 设置边框
获取当前坐标轴位置并移动
plt.gca().spines["top"].set_alpha(0.0)
"""
二、 代码实例
import time
from jqdatasdk import *
import logging
import matplotlib.pyplot as plt
import pandas as pd
auth("name", "pwd")
df = get_price('000300.XSHG',end_date='2020-4-4',count=300)
df['date1']= df.index.tolist()
df['date']=df['date1'].apply(lambda x:x.strftime('%Y-%m-%d %H:%M:%S'))
df["value"] = ((df['close']/df['high'])-1)*100
print(df)
df.drop(["date1"], axis=1, inplace=True)
print(df)
# Draw Plot
plt.figure(figsize=(12, 8), dpi=80)
plt.plot(df['date'], df['value'], color='#dc2624')
# Decoration
xtick_location = range(0,len(df),30)
print(xtick_location)
xtick_labels = [str(x[:10]) for x in df.date.tolist()[::30]]
print("xtick_labels")
print(xtick_labels)
plt.xticks(xtick_location,
xtick_labels,
rotation=60,
fontsize=12,
horizontalalignment='center',
alpha=.7
)
plt.yticks(fontsize=12, alpha=.7)
plt.title("Air Passengers Traffic", fontsize=18)
plt.grid(alpha=.3, which='both', color="r")
plt.legend(["ROE"],loc='best', title='收益率', facecolor='y')
# 解决中文显示问题
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False
plt.xlabel("时间")
plt.ylabel("收益率")
plt.xlabel(x_label, position= [1, 1])
# 底色填充
y1 = -1
y2 = -2
plt.fill_between(xtick_location, y1, y2, facecolor = 'y', alpha = 0.2)
# 文本标注
plt.text(x = 10, y = -1,s = '收益率曲线图',fontsize = 15, c = 'b',rotation = 20)
plt.annotate(
text = 'xy表示箭头端点位置,xytext表示文本注释的位置,arrowprops控制箭头',
xy = (50,-3), xytext = (100, -4),
arrowprops = {'headwidth':8,'facecolor':'g'},fontsize = 15)
# Remove borders
plt.gca().spines["top"].set_alpha(0.0)
plt.gca().spines["bottom"].set_alpha(0.3)
plt.gca().spines["right"].set_alpha(0.0)
plt.gca().spines["left"].set_alpha(0.3)
plt.savefig("test.jpg")
三、 效果图
1. 直接使用 * 的结果
a*a就是说直接把两个二维矩阵的每个元素进行对应相乘。
# 必须是两个维度完全相同的ndarray
2. 使用numpy.dot(a,b)
numpy.dot(a,b)才是真正意义上的矩阵相乘
参考
python_matplotlib改变横坐标和纵坐标上的刻度(ticks)
operands could not be broadcast together with shapes解决方案
Matplotlib入门-3-plt.gca( )挪动坐标轴
matplotlib绘图:figure和axes有什么区别?
python matplotlib.pyplot画矩形图 以及plt.gca()