龙听期货论坛's Archiver

龙听 发表于 2024-3-12 13:29

Matplotlib(绘图库)- 其他类型图【绘制散点图、条形图、等高线图、饼状图、直方图、3D图等】

[b]1 散点图[/b]

使用 scatter() 绘制散点图。[code]import matplotlib.pyplot as plt  # 为方便简介为plt
import numpy as np  # 画图过程中会使用numpy
import pandas as pd  # 画图过程中会使用pandas

# 使用numpy产生数据
fig = plt.figure()          # 创建一个窗口
ax = fig.add_subplot(1,1,1)   # 在窗口上添加一个子图
x = np.random.random(100)      # 产生随机数组
y = np.random.random(100)      # 产生随机数组
ax.scatter(x,y,s = x*100,c = 'y',marker = (5,1),alpha = 0.5,lw = 2,facecolors = 'none')  
# x横坐标,y纵坐标,s图像大小,c颜色,marker图片,lw图像边框宽度
plt.show()  # 显示图像[/code]实例效果图如下:
[img]http://p.algo2.net/2024/0312/5ddb5428b22bc.jpg[/img]

[b]2 条形图[/b]

使用 bar() 绘制条形图。[code]import matplotlib.pyplot as plt  # 为方便简介为plt
import numpy as np  # 画图过程中会使用numpy
import pandas as pd  # 画图过程中会使用pandas

n = 12
X = np.arange(n)
Y1 = (1-X/float(n)) * np.random.uniform(0.5,1.0,n)
Y2 = (1-X/float(n)) * np.random.uniform(0.5,1.0,n)

fig = plt.figure()   #创建一个窗口
ax=fig.add_subplot(1,1,1)   #添加一个子图

ax.bar(X, +Y1, facecolor='#9999ff', edgecolor='white')
ax.bar(X, -Y2, facecolor='#ff9999', edgecolor='white')

for x,y in zip(X,Y1):
    plt.text(x, y+0.05, '%.2f' % y, ha='center', va= 'bottom')

plt.ylim(-1.25,+1.25)
plt.show()[/code]实力效果图如下:
[img]http://p.algo2.net/2024/0312/dd2ea50fdd75b.jpg[/img]

[b]3 等高线图[/b]

使用 contourf() 绘制等高线图。[code]import matplotlib.pyplot as plt  # 为方便简介为plt
import numpy as np  # 画图过程中会使用numpy
import pandas as pd  # 画图过程中会使用pandas

def f(x,y): return (1-x/2+x**5+y**3)*np.exp(-x**2-y**2)

n = 256
x = np.linspace(-3,3,n)
y = np.linspace(-3,3,n)
X,Y = np.meshgrid(x,y)

fig = plt.figure()   #创建一个窗口
ax=fig.add_subplot(1,1,1)   #添加一个子图


ax.contourf(X, Y, f(X,Y), 8, alpha=.75, cmap='jet')
ax.contour(X, Y, f(X,Y), 8, colors='black', linewidth=.5)
plt.show()[/code]实例效果图如下:
[img]http://p.algo2.net/2024/0312/797631a6949d4.jpg[/img]

[b]4 饼状图[/b]

使用 pie() 绘制饼状图。[code]import matplotlib.pyplot as plt  # 为方便简介为plt
import numpy as np  # 画图过程中会使用numpy
import pandas as pd  # 画图过程中会使用pandas


plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False

label_list = ["第一部分", "第二部分", "第三部分"]    # 各部分标签
size = [55, 35, 10]    # 各部分大小
color = ["red", "green", "blue"]     # 各部分颜色
explode = [0.05, 0, 0]   # 各部分突出值
'''
绘制饼图
explode:设置各部分突出
label:设置各部分标签
labeldistance:设置标签文本距圆心位置,1.1表示1.1倍半径
autopct:设置圆里面文本
shadow:设置是否有阴影
startangle:起始角度,默认从0开始逆时针转
pctdistance:设置圆内文本距圆心距离
返回值
l_text:圆内部文本,matplotlib.text.Text object
p_text:圆外部文本
'''
plt.pie(size, explode=explode, colors=color, labels=label_list, labeldistance=1.1, autopct="%1.1f%%", shadow=False, startangle=90, pctdistance=0.6)
plt.axis("equal")    # 设置横轴和纵轴大小相等,这样饼才是圆的
plt.legend()
plt.show()[/code]实例效果图如下:
[img]http://p.algo2.net/2024/0312/31cf049ac7241.jpg[/img]

[b]5 直方图[/b]

使用 hist() 绘制直方图。[code]import matplotlib.pyplot as plt  # 为方便简介为plt
import numpy as np  # 画图过程中会使用numpy
import pandas as pd  # 画图过程中会使用pandas

# 设置matplotlib正常显示中文和负号
plt.rcParams['font.sans-serif']=['SimHei']   # 用黑体显示中文
plt.rcParams['axes.unicode_minus']=False     # 正常显示负号
# 随机生成(10000,)服从正态分布的数据
data = np.random.randn(10000)
'''
绘制直方图
data:必选参数,绘图数据
bins:直方图的长条形数目,可选项,默认为10
normed:是否将得到的直方图向量归一化,可选项,默认为0,代表不归一化,显示频数。normed=1,表示归一化,显示频率。
facecolor:长条形的颜色
edgecolor:长条形边框的颜色
alpha:透明度
'''
#plt.hist(data, bins=40, normed=0, facecolor="blue", edgecolor="black", alpha=0.7)
plt.hist(data, bins=40, facecolor="blue", edgecolor="black", alpha=0.7)
# 显示横轴标签
plt.xlabel("区间")
# 显示纵轴标签
plt.ylabel("频数/频率")
# 显示图标题
plt.title("频数/频率分布直方图")
plt.show()[/code]实例效果图如下:
[img]http://p.algo2.net/2024/0312/e52d15c67ec24.jpg[/img]

[b]6 3D图[/b]

使用 plot_surface() 绘制直方图。[code]import matplotlib.pyplot as plt  # 为方便简介为plt
import numpy as np  # 画图过程中会使用numpy
import pandas as pd  # 画图过程中会使用pandas

X = np.arange(-4, 4, 0.25)
Y = np.arange(-4, 4, 0.25)
X, Y = np.meshgrid(X, Y)
R = np.sqrt(X**2 + Y**2)
Z = np.sin(R)

fig = plt.figure()  # 先创建窗口一个窗口
ax1 = fig.add_subplot(1,1,1,projection='3d')
ax1.plot_surface(X, Y, Z, rstride=1, cstride=1, cmap='hot')

plt.show()[/code]实例效果图如下:
[img]http://p.algo2.net/2024/0312/243fd7d22ef25.jpg[/img]

页: [1]