Matplotlib的绘图基础

124 阅读3分钟

本文已参与「新人创作礼」活动,一起开启掘金创作之路。

Trick:纯demo,心在哪里,结果就在那里

 

# -*- coding: utf-8 -*-
# Author       :   szy
# Create Date  :   2019/10/17
# 如果是Mac笔记本需要在开头加上下面两行,才会绘图的时候弹出来窗口
# 如果是Windows系统,下面两行不用加
# import matplotlib
# matplotlib.use("TkAgg")
import matplotlib.pyplot as plt
import numpy as np
 
# 我们可以通过传入多个list,即传入多个点,默认会自动连成线
# plot函数第一个参数传的是X轴,第二个参数传的是Y轴,说明plot是绘制2D
# plt.plot([0, 1, 2], [1, 2, 4])
 
# 当我们只给plot函数传一个参数的时候,默认把传的值当作Y轴来画图
# x = np.linspace(0, 10, 100)
# print(x)
# print(len(x))
# plt.plot(x)
 
# 新开一个画布
##窗口加入名称
# plt.figure('sine wave')
# ##np.linspace 表示0-10随机产生100个数
# x = np.linspace(0, 10, 100)
# plt.plot(x, np.sin(x))
# plt.plot(x, np.cos(x))
import random
"----------------------------------------------------------"
# 分别生成两张图来画
# x = np.linspace(0, 10, 100)
# fig1 = plt.figure('sine wave')
# plt.plot(x, np.sin(x))
# # 保存图像到本地磁盘
# plt.savefig('sine wave')
#
# fig2 = plt.figure('cosine wave')
# plt.plot(x, np.cos(x))
# plt.savefig('cosine wave')
"-----------------------------------------------------------"
#方式1
# # 可以在一个画布里面去画多张子图
# x = np.linspace(0, 10, 100)
# # 让原有画布变成2行2列,可以画4张子图的画布,最后一个数代表是在那里画
# plt.subplot(2, 2, 2)
# #x象限 限制在(20,-5),注意这里是个反的,可以通过坐标调
# plt.xlim(20, -5)
# plt.ylim(-1.5, 1.5)
# plt.ylabel('sin')
# plt.plot(x, np.sin(x))
 
 
#方式2
# plt.subplot(2, 2, 2)
# # 直接用axis定义画图的x轴和y轴的范围
# plt.axis([-5, 20, -1.5, 1.5])
# plt.ylabel('cos')
# plt.plot(x, np.cos(x))
"-----------------------------------------------"
 
#https://www.cnblogs.com/harrymore/p/9376860.html 使用matplotlib画双纵轴坐标
"------------------------------------------------"
# 画不同种类、不同颜色的图
# x = np.linspace(0, 10, 100)
# # 为了让同一张图里面的线不重叠,分别Y轴加了0到4
# plt.plot(x, x+0, '-g', label='-g')  # “-”实线、“g”绿色,label配合legend使用
# plt.plot(x, x+1, '--c', label='--c')  # 虚线、浅蓝色
# plt.plot(x, x+2, '-.k', label='-.k')  # 点划线、黑色
# plt.plot(x, x+3, '-r', label='-r')  # 实线、红色
# plt.plot(x, x+4, 'o', label='o')  # 圈、默认就是蓝色
# plt.plot(x, x+5, 'xy', label='xy')  # 叉子、黄色
# plt.plot(x, x+6, 'dy', label='dy')  # 钻石、黄色
# # 加上图例, 加上一点效果,loc='lower right'位置防止挡住,fancybox边框,framealpha边框透明度,shadow阴影,borderpad边框宽度
# plt.legend(loc='lower right', fancybox=True, framealpha=1, shadow=True, borderpad=1)
"------------------------------------------------"
# 画散点图scatter
# x = np.linspace(0, 10, 100)
# plt.subplot(1, 2, 1)
# plt.plot(x, np.sin(x), 'o')
# plt.subplot(1, 2, 2)
# plt.scatter(x, np.sin(x))
# plot画图速度是优于scatter的!scatter是一个点一个点去处理的!
# scatter里面的一些有意思的参数,scatter画散点图可以每个点有一个独立的参数,但是系统开销会变大
"------------------------------------------------"
#seed每次出来的数据和第一次运算的数据一样,同一次随机种子的x,y数据不一样
# np.random.seed(42)
# x = np.random.rand(100)
# y = np.random.rand(100)
# # 随机出来100种颜色,去对应上面100个点
# colors = np.random.rand(100)
# # 画10种不同大小的点
# sizes = 1000 * np.random.rand(10)
# plt.scatter(x, y, c=colors, s=sizes, alpha=0.7)
"------------------------------------------------"
# 画等高线图contour ,3个维度的表达,loss损失
# x_ = np.linspace(-20, 20, 100)
# y_ = np.linspace(-20, 20, 100)
#
# # np.cbrt是开立方根,ML角度来看便是loss损失
# def f(x, y):
#     return x**2 + (y - np.cbrt(x**2))**2
#
# #meshgrid 编制网,比较密的栅格
# X, Y = np.meshgrid(x_, y_)
# Z = f(X, Y)
# plt.contour(X, Y, Z)
"------------------------------------------------"
 
plt.show()
items = [1, 2, 3, 4, 5, 6, 7, 8, 9, 0]
print (random.shuffle(items))