1. 课程简介和环境搭建.
数据绘图包
import matplotlib.pyplot as plt
plt.plot([1, 2, 3], [3, 2, 1])
plt.show()
# 画简单图
2. Numpy简介
import numpy as np
a = [1, 2, 3, 4]
x1 = np.array(a)
print(x1) # 将其转换成ndarray对象,第一种
x1 = np.arange(11)
print(x1) # 也生成一种array函数,第二种
x = np.loadtxt('000001.csv', delimiter=',', skiprows=1, usecols=(1, 4, 6), unpack=False)
# 加载txt,第一个引号就是在本目录下的文件,第二个是分隔符号,第三个是跳过第一行,第四个放在一个队列
x.shape # 显示其类型
3. 散点图.
import numpy as np
import matplotlib.pyplot as plt
height = [161, 170, 182, 175, 173, 165]
weight = [50, 58, 80, 70, 69, 55]
plt.scatter(height, weight)
plt.show()
import numpy as np
import matplotlib.pyplot as plt
height = [161, 170, 182, 175, 173, 165]
weight = [50, 58, 80, 70, 69, 55]
plt.scatter(height, weight, s=100, c='r', marker='<', alpha=0.5)
# s是图的大小,c是管颜色,marker是形状,alpha是透明度
plt.show()
4. 折线图.
import numpy as np
import matplotlib.pyplot as plt
x = np.linspace(-10, 10, 5) # -10开始到10结束,生成5份
y = x ** 2
plt.plot(x, y)
plt.show()
5. 条形图.
6. 直方图.
7. 饼状图.
8. 箱形图.
9. 颜色和样式.
10. 面向对象 VS Matlab Style.
不推荐第二种
11. 子图-subplot.
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
x = np.arange(1, 100)
fig = plt.figure()
ax1 = fig.add_subplot(221)
ax1.plot(x,x)
plt.show()
12. 多图-figure.
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
fig1 = plt.figure()
ax1 = fig1.add_subplot(111)
ax1.plot([1, 2, 3], [3, 2, 1])
fig2 = plt.figure()
ax2 = fig2.add_subplot(111)
ax2.plot([1, 2, 3], [1, 2, 3])
plt.show()
13. 网格.
两种:1. grid函数 2 . 面向对象
plt在交互式里面比较好
14. 图例_legend.
plt.legend()
推荐plt方式
15. 坐标轴范围.
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
plt.axis(-10, 10, 0, 100)
plt.xlim([-5, 5]) # 只调整x轴,不调整y轴
plt.ylim([-5, 60]) # 只调整y轴,不调整x轴
plt.xlim(xmin=5) # xmin改变,xmax不改变
16. 坐标轴刻度
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
x = np.arange(1, 11, 1)
plt.plot(x, x)
ax = plt.gca()
ax.locator_params(nbins=20)
plt.show()
还有设置日期间隔,前面讲了
17. 添加坐标轴.
添加双坐标轴
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
x = np.arange(2, 20, 1)
y1 = x**2
y2 = np.log(x)
plt.plot(x, y1)
plt.plot(x, y2, 'r')
plt.twinx()
plt.show()
18. 注释.
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
x = np.arange(-10, 11, 1)
y = x * x
plt.plot(x, y)
plt.annotate('this is the bottom', xy=(0, 1), xytext=(-2, 20),
arrowprops=dict(facecolor='r', frac=0.2, headwidth=30,width=10))
# 第一个是显示的文字,第二个是显示的坐标长度,第三个是文字坐标
plt.show()
19. 文字.
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
x = np.arange(-10, 11, 1)
y = x * x
plt.plot(x, y)
plt.text(-2, 40, 'function:y=x*x', family='serif', size=20, color='r', style='italic', weight=0)
plt.text(-2, 20, 'function:y=x*x', family='sans-serif', size=20, color='g', style='oblique', weight=1000, bbox=dict(facecolor='r', alpha=0.2))
plt.show()
20. Tex公式.
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
fig = plt.figure()
ax = fig.add_subplot(111)
ax.set_xlim([1, 7])
ax.set_ylim([1, 5])
ax.text(2, 4, r"$ \alpha_i \beta_j \pi \lambda \omega $", size=25) # 面向对象方式
ax.text(4, 4, r"$ \sin(0)=\cos(\frac{\pi}{2}) $", size=25) # 看文档查
ax.text(2, 2, r"$ \lim_{x \rightarrow y} \frac{1}{x^3} $", size=25)
ax.text(4, 2, r"$ \sqrt[4]{x}=\sqrt{y} $", size=25)
plt.show()
21. 工具栏
工具栏进行查看
22. 区域填充.
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
x = np.linspace(0, 5*np.pi, 1000)
y1 = np.sin(x)
y2 = np.sin(2*x)
# plt.plot(x, y1)
plt.plot(x, y2)
plt.fill(x, y1, 'b', alpha=0.3)
plt.fill(x, y2, 'r', alpha=0.3)
plt.show()
# fillbetween 用来使用间隔
23. 形状.
import numpy as np
import matplotlib.patches as mpatches
import matplotlib.pyplot as plt
fig, ax = plt.subplots()
xy1 = np.array([0.2, 0.2])
xy2 = np.array([0.2, 0.8])
circle = mpatches.Circle(xy1, 0.05) # 第一个位置是位置,第二个是半径
rect = mpatches.Rectangle(xy2, 0.2, 0.1, color='r')
ax.add_patch(circle)
ax.add_patch(rect)
plt.axis('equal')
plt.show()
还有其他形状,遇到了去查就行了
24. 样式-美化.
import numpy as np
import matplotlib.patches as mpatches
import matplotlib.pyplot as plt
fig, axes = plt.subplots(ncols=2, nrows=2)
ax1, ax2, ax3, ax4 = axes.ravel()
x, y = np.random.normal(size=(2, 100))
ax1.plot(x, y, 'o')
x = np.arange(0, 10)
y = np.arange(0, 10)
ncolors = len(plt.rcParams['axes.color_cycle'])
shift = np.linspace(0, 10, ncolors)
for s in shift:
ax2.plot(x, y+s, '-')
plt.show()
# 美化plt.style.use('ggplot')
25. 极坐标.
import numpy as np
import matplotlib.pyplot as plt
r = np.arange(1, 6, 1)
theta = [0, np.pi/2, np.pi, 3*np.pi/2, 2*np.pi]
ax = plt.subplot(111, projection='polar')
ax.plot(theta, r, color='r', linewidth=3)
ax.grid(True)
plt.show()
26. 函数积分图.
import numpy as np
import matplotlib.pyplot as plt
from matplotlib.patches import Polygon
def func(x):
return -(x-2)*(x-8)+40
x = np.linspace(0, 10)
y = func(x)
fig, ax = plt.subplots()
plt.plot(x, y, 'r', linewidth=2)
a = 2
b = 9
ax.set_xticks([a, b])
ax.set_yticks([])
ax.set_xticklabels(['$a$', '$b$'])
ix = np.linspace(a, b)
iy = func(ix)
ixy = zip(ix, iy)
verts = [(a, 0)] + list(ixy) + [(b, 0)]
poly = Polygon(verts, facecolor='0.9', edgecolor='0.5')
ax.add_patch(poly)
plt.figtext(0.9, 0.05, '$x$')
plt.figtext(0.1, 0.9, '$y$')
# 画数学公式
x_math = (a + b) * 0.5*0.7
y_math = 35
plt.text(x_math, y_math, r'$\int_a^b (-(x-2)*(x-8)+40)dx$')
plt.show()
28. 散点-条形图.
import numpy as np
import matplotlib.pyplot as plt
from matplotlib.patches import Polygon
plt.style.use('ggplot')
x = np.random.randn(200)
y = x + np.random.randn(200) * 0.5
margin_border = 0.1
width = 0.6
margin_between = 0.02
height = 0.2
left_s = margin_border
bottom_s = margin_border
height_s = width
width_s = width
left_x = margin_border
bottom_x = margin_border + width + margin_between
height_x = height
width_x = width
left_y = margin_border + width + margin_between
bottom_y = margin_border
height_y = width
width_y = height
plt.figure(1, figsize=(8, 8))
rect_s = [left_s, bottom_s, width_s, height_s]
rect_x = [left_x, bottom_x, width_x, height_x]
rect_y = [left_y, bottom_y, width_y, height_y]
axScatter = plt.axes(rect_s)
axHisX = plt.axes(rect_x)
axHisY = plt.axes(rect_y)
axHisX.set_xticks([])
axHisY.set_yticks([])
axScatter.scatter(x, y)
bin_width = 0.25
xymax = np.max([np.max(np.fabs(x)), np.max(np.fabs(y))])
lim = int(xymax/bin_width + 1) * bin_width
axScatter.set_xlim(-lim, lim)
axScatter.set_ylim(-lim, lim)
bins = np.arange(-lim, lim+bin_width, bin_width)
axHisX.hist(x, bins=bins)
axHisY.hist(y, bins=bins, orientation='horizontal')
axHisX.set_xlim(axScatter.get_xlim())
axHisY.set_ylim(axScatter.get_ylim())
plt.title('Scatter and Hist')
plt.show()
31. 球员能力图
import numpy as np
import matplotlib.pyplot as plt
from matplotlib.font_manager import FontProperties
plt.style.use('ggplot')
font = FontProperties(fname=r'c:\windows\fonts\simsun.ttc', size=12)
ability_size = 6
ability_label = [u'进攻', u'防守', u'盘带', u'速度', u'体力', u'射术']
ax1 = plt.subplot(221, projection='polar')
ax2 = plt.subplot(222, projection='polar')
ax3 = plt.subplot(223, projection='polar')
ax4 = plt.subplot(224, projection='polar')
player = {
'M': np.random.randint(size=ability_size, low=60, high=99),
'H': np.random.randint(size=ability_size, low=60, high=99),
'P': np.random.randint(size=ability_size, low=60, high=99),
'Q': np.random.randint(size=ability_size, low=60, high=99),
}
theta = np.linspace(0, 2*np.pi, 6, endpoint=False)
theta = np.append(theta, theta[0])
player['M'] = np.append(player['M'], player['M'][0])
ax1.plot(theta, player['M'], 'r')
ax1.fill(theta, player['M'], 'r', alpha=0.3)
ax1.set_xticks(theta)
ax1.set_xticklabels(ability_label, y=0.1, fontproperties=font)
ax1.set_title(u'梅西', fontproperties=font, color='r', size=20)
player['H'] = np.append(player['H'], player['H'][0])
ax2.plot(theta, player['H'], 'g')
ax2.fill(theta, player['H'], 'g', alpha=0.3)
ax2.set_xticks(theta)
ax2.set_xticklabels(ability_label, y=0.1, fontproperties=font)
ax2.set_title(u'哈维', fontproperties=font, color='g', size=20)
player['P'] = np.append(player['P'], player['P'][0])
ax3.plot(theta, player['P'], 'b')
ax3.fill(theta, player['P'], 'b', alpha=0.3)
ax3.set_xticks(theta)
ax3.set_xticklabels(ability_label, y=0.1, fontproperties=font)
ax3.set_title(u'皮克', fontproperties=font, color='b', size=20)
player['Q'] = np.append(player['Q'], player['Q'][0])
ax4.plot(theta, player['Q'], 'y')
ax4.fill(theta, player['Q'], 'y', alpha=0.3)
ax4.set_xticks(theta)
ax4.set_xticklabels(ability_label, y=0.1, fontproperties=font)
ax4.set_title(u'切赫', fontproperties=font, color='y', size=20)
plt.show()
32. 股票K线图
import numpy as np
import matplotlib.pyplot as plt
from matplotlib.finance import quotes_historical_yahoo_ohlc, canddestick_ohic
plt.style.use('ggplot')
data1 = (2010, 2, 1)
data2 = (2010, 5, 1)
quotes_historical_yahoo_ohlc('INTC', data1, data2)
volumns = np.array([])
dates = np.array([])
for record in quotes:
dates = np.append(dates.record[0])
volumns = np.append(volumns.record[5])
left, width = 0.1, 0.8
rect_vol = [left, 0.1, width, 0.26]
rect_main = [left, 0.4, width, 0.5]
fig = plt.figure()
ax_vol = fig.add_axes(rect_vol)
ax_vol.fill_between(dates, volumns, color='y')
ax_vol.xaxis_date()
plt.setp(ax_vol.get_xticklabels(), rotation=30, horizontalalignment='right')
ax_main = fig.add_axes(rect_main)
canddestick_ohic(ax_main, quotes, width=0.6, colorup='r', colordown='g')
ax_main.axes.get_xaxis().set_visible(False)
ax_main.axes.get_xaxis().set_visible(False)
ax_main.set_title('Stock INTC Price and Volumn')
plt.show()