常用绘制函数
主要包括linux下绘图问题,折线图,直方图,散点图,柱状图,堆积柱状图,饼图,热图,绘图线型,坐标轴范围,坐标轴显示,显示标题,显示文字,绘图保存,子图,栅格,标注,重新标定坐标轴等
# 防止linux无显示设备运行程序会出错
# 远程linux且无显示设备时,除非装显示工具,否则就算不报错也无法显示图,但可以保存图
import matplotlib
matplotlib.use('Agg')
# 导入包
import matplotlib.pyplot as plt
x = list(range(5))
y = [4, 5, 6, 3, 4]
z = [6, 8, 9, 7, 1]
choice = "plot"
if choice == "plot":
plt.plot(x, y)
elif choice == "plot_and_show_point":
plt.plot(x, y, "r*-", lw=1) # r表示红色,*表示在点用*显示,-表示实线,lw表示线宽
elif choice == "limit_axis_title":
plt.plot(x, y)
plt.xlabel("axis_x")
plt.ylabel("axis^y")
plt.title("demo")
plt.xlim(0, 10) # x轴范围
plt.ylim(0, 20)
plt.savefig("./demo.png") # 保存绘图
elif choice == "plot_two_curve_in_one_fig":
plt.plot(x ,y)
plt.plot(x, z)
plt.legend(["y-x", "z-x"], loc='best') # 图例,loc='best'是自动选择合适位置显示
elif choice == "subplot":
plt.figure(1)
plt.subplot(211) # 第一张图中的第一张子图
plt.plot(x, y)
plt.subplot(212) # 第一张图中的第二张子图
plt.plot(x, z)
plt.figure(2) # 第二张图
plt.plot(y,z) # 默认创建子图subplot(111)
elif choice == "text_annotation":
plt.plot(x, y)
plt.text(1, 3, r'$\mu=100,\ \sigma=15$') # 在坐标(1,3)处显示文字
plt.grid(True) # 打开栅格
# 标注,箭头端在xy处,"this line"文字显示在xytext, 黑色箭头
plt.annotate('this line', xy=(2.5, 4.5), xytext=(2, 3.5), arrowprops=dict(facecolor='black', shrink=0.01))
elif choice == "rename_axis":
# 自己标定坐标轴
plt.plot(x ,y)
# plt.axis([-4,4,-1.2,1.2])
# 设置轴记号
plt.xticks([0, 1, 2, 3, 4], [r'a', r'b', r'c', r'd', r'd'])
plt.yticks([4, 5], [r'what', r'how'])
elif choice == "zhi_fang_tu":
plt.hist(y, 2) # 切成2个bin显示
elif choice == "san_dian_tu":
plt.scatter(x, y)
elif choice == "tiao_xing_tu": # 条形图/柱状图/bar
plt.bar(x, y)
elif choice == "dui_ji_zhu_zhuang_tu":
plt.bar([3, 4, 5, 6, 7], x, align="center", color=['red']) # 在指定位置[3, 4, 5, 6, 7]绘制x,红色
plt.bar([3, 4, 5, 6, 7], y, align="center", bottom=x, color=['blue']) # 在指定位置并在x的基础上绘制y,蓝色
p = []
for x_, y_ in zip(x, y):
p.append(x_ + y_)
plt.bar([3, 4, 5, 6, 7], z, align="center", bottom=p, color=['green']) # 在指定位置并在x+y的基础上绘制z,绿色
elif choice == "bing_tu":
plt.pie(z, labels=y, autopct='%1.1f%%') # y是这一块饼是什么,z是这快饼多大
elif choice == "heat_tu":
# 热图
import numpy as np
data = np.random.rand(4, 2)
rows = list('1234')
columns = list('MF')
fig, ax = plt.subplots()
ax.pcolor(data, cmap=plt.cm.Reds, edgecolor='k') # 红色风格
ax.set_xticks(np.arange(0, 2) + 0.5)
ax.set_yticks(np.arange(0, 4) + 0.5)
ax.xaxis.tick_bottom() # 放底下
ax.yaxis.tick_left() # 放左边
ax.set_xticklabels(columns, minor=False, fontsize=20)
ax.set_yticklabels(rows, minor=False, fontsize=20)
plt.show() # 显示