人工智能5.4 -- 机器学习数据科学包(numpy、pandas、matpotlib)篇(四)matplotlib图表

人工智能

python,大数据,机器学习,深度学习,计算机视觉

五、机器学习数据科学包(numpy、pandas、matpotlib)篇(四)matplotlib图表

前言

回顾一下从.csv文件读取数据,假设有一存放股票信息的000001.csv文件,打开后其部分内容如下,
在这里插入图片描述要从文件读取股票Date,Low,Turnover信息,代码如下:

import numpy as np

#(1)读取到一个变量里以array存放存放Date,Low,Turnover
# 导入csv文件,分隔识别符delimiter是逗号,读取时skiprows跳过第一行,读取时usecols使用第1,4,6列。
x = np.loadtxt('000001.csv', delimiter=',', skiprows=1, usecols=(1,4,6), unpack=False)# unpack默认是False,可省略

#(2)读取到三个变量里分别存放Date,Low,Turnover
# unpack:不把读取的数据放在一个变量里边。
open, close, volume = np.loadtxt('000001.csv', delimiter=',', skiprows=1, usecols=(1,4,6), unpack=True)# 将读取的三列数据分别放在三个变量里面


# test
print(x) #或print(x.shape)查看结果
print(open)
print(close)
print(volume)

Xmind图谱

在这里插入图片描述在这里插入图片描述

散点图:plt.scatter()

例1. 简单的例子:身高–体重

matplotlib.pyplot带的 散点函数scatter()

import numpy as np
import matplotlib.pyplot as plt

height = [161, 170, 182, 175, 173, 165]
weight = [50, 58, 80, 70, 69, 55]

# scatter v./n.散射
plt.scatter(height, weight) # 不同于plot。plot(x_list,y_list)是连点成线,scatter(x_list, y_list)就是散点。
plt.show()

运行结果:
在这里插入图片描述

例2. 正相关、负相关、不相关相关性
import numpy as np
import matplotlib.pyplot as plt

N = 1000
# 无相关
x = np.random.randn(N)
y = np.random.randn(N)
plt.scatter(x, y)
plt.show()

# 正相关
x = np.random.randn(N)
y = x + np.random.randn(N)*0.5 # y是由x生成的,必定相关。
plt.scatter(x, y)
plt.show()

# 负相关
x = np.random.randn(N)
y = -x + np.random.randn(N)*0.5
plt.scatter(x, y)
plt.show()

运行结果:
在这里插入图片描述在这里插入图片描述在这里插入图片描述

例3. 实例:股票价格涨幅

股票当日涨幅和前一天的涨幅是否具有相关性(前一天涨,第二天是否也涨?)

import numpy as np
import matplotlib.pyplot as plt

# 文件读取 股市开盘价,收盘价
open, close = np.loadtxt('000001.csv', delimiter=',', skiprows=1, usecols=(1, 4), unpack=True)
change = close - open

yesterday = change[:-1]
today = change[1:]

plt.scatter(yesterday, today)
plt.show()

运行结果:
在这里插入图片描述
可以看到股票当日涨幅和前一天的涨幅不具有相关性,即不存在前一天涨,第二天也涨的规律。

例4. scater() 的参数 c, s, alpha, marker
import numpy as np
import matplotlib.pyplot as plt

import numpy as np
import matplotlib.pyplot as plt

N = 1000
# 无相关
x = np.random.randn(N)
y = np.random.randn(N)
plt.scatter(x, y, s=100, c='r', marker='<')
plt.show()

运行结果:
在这里插入图片描述

import numpy as np
import matplotlib.pyplot as plt

import numpy as np
import matplotlib.pyplot as plt

N = 1000
# 无相关
x = np.random.randn(N)
y = np.random.randn(N)
plt.scatter(x, y, s=100, c='r', alpha=0.5)# 透明度改为0.5
plt.show()

运行结果:
在这里插入图片描述可以看到颜色深的地方是点密集的地方,如果透明度用默认的alpha=1,则看不出颜色深浅。
所以改变透明度alpha的值可以通过颜色深浅看出点的密集程度
上面图可以放大了看,如下效果:
在这里插入图片描述

折线图:plt.plot()

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()

运行结果:
在这里插入图片描述

条形图:plt.bar() 和 plt.barh()

例1
import numpy as np
import matplotlib.pyplot as plt

x = np.arange(5) # [0,1,2,3,4]
y = [20, 10, 30, 25, 15]

# 下面plt.figure()将运行结果三张图一起显示出来。
# 第一个figure图:
plt.figure()
pl = plt.bar(x, y) # pl = plt.bar(x=x, height=y)

# 第二个figure图:
plt.figure()
# 设置参数:条形宽度、条形颜色。默认width=0.8, color='blue'(或color='b')
pl = plt.bar(x, y, 0.5, color='red') # pl = plt.bar(x=x, height=y, width=0.5, color='red')

# 第三个figure图:
plt.figure()
# 水平条形图
pl = plt.barh(x, y, 0.5, color='red') # pl = plt.barh(y=x, width=y, height=0.5, color='red')
#也可这么写,仅做参考 pl = plt.bar(x=0, bottom=x, width=y, height=0.5, color='red', orientation='horizontal') # 或 pl = plt.bar(x, y)
# 为此,定义变量时:可将x变量换成index

plt.show()

运行结果:
在这里插入图片描述在这里插入图片描述在这里插入图片描述

例2. 并列的条形图
import numpy as np
import matplotlib.pyplot as plt

x = np.arange(4)

sales_BJ = [52,55,63,53] # 北京销售量
sales_SH = [44,66,55,31] # 上海销售量

bar_width = 0.3

plt.bar(x, sales_BJ, bar_width, color='b') # 北京
# 即 plt.bar(x=x, height=sales_BJ, width=bar_width, color='b')

# 横向堆叠
plt.bar(x+bar_width, sales_SH, bar_width, color='r')# 上海
# 即 plt.bar(x=x+bar_width, height=sales_SH, width=bar_width, color='r')

plt.show()

运行结果:
在这里插入图片描述

例3. 层叠的条形图
import numpy as np
import matplotlib.pyplot as plt

x = np.arange(4)

sales_BJ = [52,55,63,53] # 北京销售量
sales_SH = [44,66,55,31] # 上海销售量

bar_width = 0.3

plt.bar(x, sales_BJ, bar_width, color='b') # 北京
# 即 plt.bar(x=x, height=sales_BJ, width=bar_width, color='b')

# 竖向堆叠
plt.bar(x, sales_SH, bar_width, color='r', bottom=sales_BJ)# 上海
# 即 plt.bar(x=x, height=sales_SH, width=bar_width, color='r', bottom=sales_BJ)

plt.show()

运行结果:
在这里插入图片描述

直方图:plt.hist() 和 plt.hist2d() ----- 用于探索 双变量的联合分布

例1.单变量直方图(1-D直方图)
import numpy as np
import matplotlib.pyplot as plt

mu = 100 # mean of distribution
sigma =20 # standard deviation of distribution
x = mu + sigma*np.random.randn(2000)

plt.figure()
plt.hist(x, bins=10, color='green')

plt.figure()
plt.hist(x, bins=10, color='red', normed=True)# normed默认False则显示实际数,True则显示比例频率。

plt.show()

运行结果:
在这里插入图片描述在这里插入图片描述
注:当条形越多越接近一条平滑的曲线。

例2. 双变量联合直方图(2-D直方图)----- 探索双变量的联合分布时非常有用!

不再是例1(1-D直方图)中用y值高度表示频率大小,2-D直方图是用颜色深浅表示频率大小。

import numpy as np
import matplotlib.pyplot as plt

x = np.random.randn(1000)+2
y = np.random.randn(1000)+3

plt.hist2d(x, y, bins=40)

plt.show()

运行结果:
在这里插入图片描述
从图中:越往中间越亮,说明频率越高。越往边缘越暗,说明频率越低。

饼状图:plt.pie()

# import numpy as np
import matplotlib.pyplot as plt

fracs = [15, 30, 45, 10] # (15:30:45:10)*100%,第一份占比15/(15+30+45+10)*100% = 15%
# fracs = [15, 10, 15, 10] # (15:10:15:10)*100%,第一份占比15/(15+10+15+10)*100% = 30%
labels = 'A', 'B', 'C', 'D'

# 设置属性
explode = [0, 0.08, 0, 0]
plt.axes(aspect=1) # 显示为圆形饼状图,不写这句话则默认椭圆形。

# pie()参数:x各份占比,labels各份标签名,autopct = auto percent显示各份占比, explode分离各份与圆心的距离以便突出显示,shadow阴影立体感
plt.pie(x=fracs, labels=labels, autopct='%.0f%%', explode=explode, shadow=True)

############### 注释 start ###################
""""autopct='%.0f%%'为python语法,举例如下:"""
# a = 23
# print("%.2f" %a) # 结果:23.00
# print("%.2f%%" %a) # 结果:23.00%   %是占位符如同\的转义字符
# print("%.2f%%" %23) # 结果:23.00%
############### 注释 end ###################

plt.show()

运行结果:
在这里插入图片描述

箱形图:plt.boxplot()

例1
import numpy as np
import matplotlib.pyplot as plt

np.random.seed(100) # seed( ) 用于指定随机数生成时所用算法开始的整数值,如果使用相同的seed()值,则每次生成的随即数都相同,如果不设置这个值,则系统根据时间来自己选择这个值,此时每次生成的随机数因时间差异而不同。 参考:https://blog.csdn.net/linzch3/article/details/58220569
data = np.random.normal(size=1000, loc=0, scale=1) # 随机生成1000个元素的一维数组

plt.boxplot(data, sym='o', whis=1.5)

plt.show()

运行结果:
在这里插入图片描述

例2
import numpy as np
import matplotlib.pyplot as plt

np.random.seed(100)
data = np.random.normal(size=(1000, 4), loc=0, scale=1) # 1000行*4列的二维数组
labels = ['A', 'B', 'C', 'D']

plt.boxplot(data, labels=labels)

plt.show()

运行结果:
在这里插入图片描述

颜色和样式

(1)颜色
import numpy as np
import matplotlib.pyplot as plt

y = np.arange(1, 5)

# 设置颜色,默认蓝色
# 法1:单词法
plt.plot(y, color='g') # 或green
# 法2:灰度法
plt.plot(y+1, color='0.5') # 灰度为0.5
# 法3:十六进制法
plt.plot(y+2, color='#FF00FF') # 紫红色
# 法4:RGB元组法
plt.plot(y+3, color=(0.1, 0.2, 0.3)) # 蓝黑色

plt.show()

运行结果:
在这里插入图片描述注:既使不设置颜色,生成不同的直线时也会自动分配颜色,按照系统默认顺序,顺序如下:
在这里插入图片描述

(2)点型
import numpy as np
import matplotlib.pyplot as plt

y = np.arange(1, 5)

# 设置点
plt.plot(y, marker = 'o') # marker可以省略,会自动匹配。但写maker是线,省略marker是点
plt.plot(y+1, marker = 'D')
plt.plot(y+2, '^')
plt.plot(y+3, 'p')

plt.show()

运行结果:
在这里插入图片描述
注:具体的点、线形状表示见前面Xmind图

(3)线型
import numpy as np
import matplotlib.pyplot as plt

y = np.arange(1, 5)

# 设置线型
plt.plot(y, '-') # 默认实线
plt.plot(y+1, '--') # 虚线
plt.plot(y+2, '-.') # 点划线
plt.plot(y+3, '.') # 点线

plt.show()

运行结果:
在这里插入图片描述

(4)样式字符串

可以将上面的组合起来使用,即将颜色、点型、线型写成一个字符串。

import numpy as np
import matplotlib.pyplot as plt

y = np.arange(1, 5)

# 样式字符串法:组合一起使用
plt.plot(y, 'ro--') # 红色 圆点 虚线
plt.plot(y+1, 'g*:') # 绿色 星型点 点线
plt.plot(y+2, 'kp-') # 黑色 五边形点 实线

plt.show()

在这里插入图片描述

子图:plt.subplot()

子图即将一张图分成多个,生成多个子图,用的Matplotlib对象知识。
参数:FigureCanvas画布,Figure图,Axes坐标轴。

法1:直接法

直接用 子图函数subplot, sub表子

import numpy as np
import matplotlib.pyplot as plt

x = np.arange(1, 100)

# plt自带的子图函数subplot, sub表子
plt.subplot(221)
plt.plot(x, x)

plt.subplot(222)
plt.plot(x, -x)

plt.subplot(223)
plt.plot(x, x*x)

plt.subplot(224)
plt.plot(x, np.log(x))

plt.show()

运行结果:
在这里插入图片描述

法2:对象法,生成figure对象
import numpy as np
import matplotlib.pyplot as plt

x = np.arange(1, 100)
fig = plt.figure() # 生成figure对象。一张图

# 子图1
# figure图的对象fig调用add_subplot添加子图
ax1 = fig.add_subplot(221) # 分成2行*2列 = 4份,用第1份。
ax1.plot(x, x)

# 子图2
ax2 = fig.add_subplot(222) # 分成2行*2列 = 4份,用第2份
ax2.plot(x, -x)

# 子图3
ax2 = fig.add_subplot(223) # 分成2行*2列 = 4份,用第3份
ax2.plot(x, x*x)

# 子图4
ax2 = fig.add_subplot(224) # 分成2行*2列 = 4份,用第4份
ax2.plot(x, np.log(x)) # numpy带的对数函数log()

plt.show()

运行结果:
在这里插入图片描述
附:子图的生成有三种方法:
(1)plt.subplots:如 fig, ax = plt.subplots(2, 2) #或 plt.subplots(22)
(2)plt.subplot:如 plt.subplot(2, 2, 1) # 或 plt.subplot(221)
(3)plt.add_subplot:如 fig = plt.figure() 再 ax = fig.add_subplot(2, 2, 1) # 或 fig.add_subplot(221)
可以参考 文章

多图:plt.figure()

前面用到过,就是运行的时候出来多个图。用一次plt.figure()就多出来一张

写法1(直接法):
import numpy as np
import matplotlib.pyplot as plt

x = np.arange(1, 100)
y = np.arange(1, 100)

plt.figure() # 为方便后面可能调用,常常写 fig1 = plt.figure()
plt.plot(x, y)

plt.figure() # 同理,为方便后面可能调用,常常写 fig2 = plt.figure()
plt.plot(x, y*y) # y*y即y**2。注意:y = np.arange(1, 100)可以 y*y, 若y = [1,2,3]这种写法不能y*y

plt.show()

运行结果:
在这里插入图片描述在这里插入图片描述

写法2(对象法):
import numpy as np
import matplotlib.pyplot as plt

x = np.arange(1, 100)
y = np.arange(1, 100)

fig1 = plt.figure()
ax1 = fig1.add_subplot(111) # 分成1行*1列=1份,取第1份,即不分,子图就是整个原图。
ax1.plot(x, y)

fig2 = plt.figure()
ax2 = fig2.add_subplot(111)
ax2.plot(x, y*y)

plt.show()

运行结果同上。

网格:plt.grid()

网格的好处:可以很清楚的看到点对应的坐标值,进而能直观地反应出如斜率等信息。

法1(直接法):
import numpy as np
import matplotlib.pyplot as plt

x = np.arange(1, 5)
plt.plot(x, x*2)

# 开启网格
plt.grid() # 默认True,即plt.grid(True)
# plt.grid() # 若写了两句 plt.grid()或plt.grid(True)则关闭。
# plt.grid(False) 但写了两句 plt.grid(False)不会开启。

# 开启网格的同时,设置网格线颜色
plt.grid(color='r') # 设置红色,默认灰色!注意不是蓝色了!

# 开启网格的同时,设置网格线宽
plt.grid(linewidth='2') # 这里'2'也可写成2

# 开启网格的同时,设置网格线型
plt.grid(linestyle='--') # 设置虚线。默认实线'-'

# 可以同时设置
# plt.grid(color='r', linewidth=2, linestyle='--')

plt.show()

运行结果:
在这里插入图片描述

法2(对象法):

同样,也可以用面向对象方式生成网格

import numpy as np
import matplotlib.pyplot as plt

x = np.arange(1, 5)

fig = plt.figure()
ax = fig.add_subplot(111)

ax.plot(x, x*2)
ax.grid(color='r') 
ax.grid(linewidth='2')
ax.grid(linestyle='--')

# 可以同时设置
# ax.grid(color='r', linewidth=2, linestyle='--')

plt.show()

运行结果同上。
【注意】:有一个小常识。面向对象方式生成的网格不会产生交互式效果。即当我们用命令行模式/命令行窗口写代码时,比如改变网格的颜色等,在命令行模式下回车运行代码,颜色不会改变,即看不到交互效果。

图例legend:plt.legend()

legend n.传说;图例,说明,解释。

写法一:在plt.plot()里先声明label,然后用legend图例化(相当于变量先声明再赋值)
例1. 小图例框legend位置loc
import numpy as np
import matplotlib.pyplot as plt

x = np.arange(1, 11, 1)

plt.plot(x, 2*x, label='Normal')
plt.plot(x, 3*x, label='Fast')
plt.plot(x, 4*x, label='Faster')
# 上面的label是不显示的,需要下面的legend()
plt.legend() # 显示上面的label,显示为一个小图例框legend

# 下面设置小图例框legend的位置,新版默认loc=0自适应最佳位置,很方便了。
# 小图例框位置 loc = location,一般我们使用默认的loc=0即可!
plt.legend(loc=0) # 0即best表自适应最佳位置。默认loc=0。等价plt.legend()
# plt.legend(loc=1) # 右上角
# plt.legend(loc=2) # 左上角
# plt.legend(loc=3) # 左下角
# plt.legend(loc=4) # 右下角
# plt.legend(loc=5) # 右侧
# plt.legend(loc=6) # 左侧居中
# plt.legend(loc=7) # 右侧居中
# plt.legend(loc=8) # 下侧居中
# plt.legend(loc=9) # 上侧居中
# plt.legend(loc=10) # 中心

plt.show()

运行结果:
在这里插入图片描述

例2 小图例框legend分列显示ncol

(1)分成3列:

import numpy as np
import matplotlib.pyplot as plt

x = np.arange(1, 11, 1)

plt.plot(x, 2*x, label='Normal')
plt.plot(x, 3*x, label='Fast')
plt.plot(x, 4*x, label='Faster')

plt.legend(ncol=3) # 小图例框legend 分成3列col显示
# plt.legend(ncol=2) # 分成2列col显示

plt.show()

运行结果:
在这里插入图片描述
(2)分成2列:

import numpy as np
import matplotlib.pyplot as plt

x = np.arange(1, 11, 1)

plt.plot(x, 2*x, label='Normal')
plt.plot(x, 3*x, label='Fast')
plt.plot(x, 4*x, label='Faster')

plt.legend(ncol=2) # 小图例框legend 分成2列col显示

plt.show()

运行结果:
在这里插入图片描述
注意:只有分列没有分行,只有ncol没有nrow。

写法二:直接legend()定义标签和图例化一起搞。(相对于变量声明并赋值)

举一个例子即可:

import numpy as np
import matplotlib.pyplot as plt

x = np.arange(1, 11, 1)

plt.plot(x, 2*x)
plt.plot(x, 3*x)
plt.plot(x, 4*x)

plt.legend(['Normal', 'Fase', 'Faster'])

# 可以一起设置
# plt.legend(['Normal', 'Fase', 'Faster'], col=10, ncol=3)

plt.show()

运行结果:
在这里插入图片描述

注:

同样:上面的都算是 (plt直接法),还可以 (对象法)
举一个例子即可:

import numpy as np
import matplotlib.pyplot as plt

x = np.arange(1, 11, 1)

fig = plt.figure()
ax = fig.add_subplot(111)

ax.plot(x, 2*x)
ax.plot(x, 3*x)
ax.plot(x, 4*x)

ax.legend(['Normal', 'Fase', 'Faster'])

# 可以一起设置
# ax.legend(['Normal', 'Fase', 'Faster'], col=10, ncol=3)

plt.show()

运行结果同上。

坐标轴范围:plt.axis()

1、原图(作为对比):

import numpy as np
import matplotlib.pyplot as plt

x = np.arange(-10, 11, 1)

# 二次函数
plt.plot(x, x*x)

# 加网格,看得清晰
plt.grid(color='r', linestyle='--')

plt.show()

运行结果:
在这里插入图片描述
2、plt.axis(): 截取原图的一部分显示。------ 除了直接法,还可以用对象法

import numpy as np
import matplotlib.pyplot as plt

x = np.arange(-10, 11, 1)

# 二次函数
plt.plot(x, x*x)

# axis() 可限定坐标轴范围
plt.axis([-5, 5, 20, 60]) # 截取图,取坐标范围,x:-5~5; y:20~60 ,只显示此范围内的图。

# 加网格,看得清晰
plt.grid(color='r', linestyle='--')

plt.show()

运行结果:
在这里插入图片描述
3、

  • plt.xlim(): 只限定x轴范围; (xlim = x + limit)
  • plt.ylim(): 只限定y轴范围
  • 上面两个都只能用plt直接法,不能用figure对象法。
    (1)限定x
import numpy as np
import matplotlib.pyplot as plt

x = np.arange(-10, 11, 1)

# 二次函数
plt.plot(x, x*x)

# xlim() 只限定x轴范围
plt.xlim([-5, 5])

# 加网格,看得清晰
plt.grid(color='r', linestyle='--')

plt.show()

运行结果:
在这里插入图片描述
(2)限定y

import numpy as np
import matplotlib.pyplot as plt

x = np.arange(-10, 11, 1)

# 二次函数
plt.plot(x, x*x)

# ylim() 只限定y轴范围
plt.ylim([0, 60])

# 加网格,看得清晰
plt.grid(color='r', linestyle='--')

plt.show()

运行结果:
在这里插入图片描述
(3)限定x上下限

import numpy as np
import matplotlib.pyplot as plt

x = np.arange(-10, 11, 1)

# 二次函数
plt.plot(x, x*x)

# 限定x轴范围:-5~10
plt.xlim(xmin=-5, xmax=10)

# 加网格,看得清晰
plt.grid(color='r', linestyle='--')

plt.show()

运行结果:
在这里插入图片描述
(4)限定x下限

import numpy as np
import matplotlib.pyplot as plt

x = np.arange(-10, 11, 1)

# 二次函数
plt.plot(x, x*x)

# 限定x下限是-5
plt.xlim(xmin=-5)

# 加网格,看得清晰
plt.grid(color='r', linestyle='--')

plt.show()

运行结果:
在这里插入图片描述

坐标轴刻度:plt.gca() 和 plt.gca().(…)

import numpy as np
import matplotlib.pyplot as plt

x = np.arange(1, 11, 1)

plt.plot(x, x)
ax = plt.gca() # 获取当前坐标轴

# 调整坐标轴x,y轴为5个刻度
ax.locator_params(nbins=5)
# ax.locator_params('x', nbins=5) # 只调整x轴为5个刻度

plt.show()

运行结果:
在这里插入图片描述

import numpy as np
import matplotlib.pyplot as plt
import matplotlib as mpl
import datetime

fig = plt.figure()
start = datetime.datetime(2018, 1, 1)
stop = datetime.datetime(2019, 1, 1)
delta = datetime.timedelta(days=1)

dates = mpl.dates.drange(start, stop, delta)
y = np.random.rand(len(dates))
ax = plt.gca() # 获取当前坐标轴
ax.plot_date(dates, y, linestyle='-', marker='') # plot_date进行时间图形的绘制
date_format = mpl.dates.DateFormatter('%Y-%m') # %Y-%m-%d 时间格式化
ax.xaxis.set_major_formatter(date_format) # 将上面的date_format应用到图上面
fig.autofmt_xdate() # x轴时间下标数字,美化显示,自适应

plt.show()

运行结果:
在这里插入图片描述

添加坐标轴:plt.twinx() 和 plt.twiny() ----- 双胞胎x轴y轴

比如:一幅图有两个函数曲线,我们添加一个y轴给第二个函数使用。

法1:plt直接法
import numpy as np
import matplotlib.pyplot as plt

x = np.arange(2, 20, 1)
y1 = x*x
y2 = np.log(x)
plt.plot(x, y1) # 默认蓝色 即 plt.plot(x, y1, 'b')蓝色

# 添加坐标轴,共用一个x轴,在右侧又多出来一个y轴,给(x, y2)用。----- 双坐标轴
plt.twinx()
plt.plot(x, y2, 'r') # 红色

plt.show()

运行结果:
在这里插入图片描述

法2:figure对象法
import numpy as np
import matplotlib.pyplot as plt

x = np.arange(2, 20, 1)
y1 = x*x
y2 = np.log(x)

fig = plt.figure()
ax1 = fig.add_subplot(111)
ax1.plot(x, y1) # 默认蓝色 即 plt.plot(x, y1, 'b')蓝色
ax1.set_xlabel('Compare Y1 and Y2') # x轴命名为 ompare Y1 and Y2
ax1.set_ylabel('Y1') # y轴命名为Y1

# 双坐标轴,在右侧又多出来一个y轴,给(x, y2)用
ax2 = ax1.twinx()
ax2.plot(x, y2, 'r') # 红色
ax2.set_ylabel('Y2') # y轴命名为Y2

plt.show()

运行结果:
在这里插入图片描述

小结:numpy和pandas必会作业练习

1.会用matplotlib.pyplot包的plot()描点划线。

import matplotlib.pyplot as plt
plt.plot([1,2,4,5],[1,4,6,-1]) #plot(): 坐标x=[1,2,4,5], y=[1,4,6,-1]
plt.show()

在这里插入图片描述
2.

  • 使用numpy生成100以内随机数组,
  • 再对数组求最大值、最小值、均值、方差,并进行排序。
  • 将数组存储到文件,再从该文件中读取数组,
    代码如下:
import numpy as np

a = np.random.randint(1, 100, 10)
print(a)
#(np函数法)
print(np.min(a), np.max(a), np.mean(a), np.var(a)) # mean均值,var方差
#(对象调用法)
print(a.min(), a.max(), a.mean(), a.var())

#(np排序法)np.sort(a)原a不变,相当于np.sort()生成了一个copy()后去排序。
print(np.sort(a))
print(a)

#(对象排序法)a.sort()原a改变。是对象a自己调用sort(),那你自己调用sort 自己肯定会改变啊
y = a.sort()
print(y) # 结果None
print(a)

np.savetxt('01_numpy_task_2.csv', a) # 保存的文件格式自定义txt,csv等。不指定默认文本也可以
a2 = np.loadtxt('01_numpy_task_2.csv')
print('读文件:', a2)

运行结果:

C:\Python\Anaconda3\python.exe C:/AI/AnacondaProject/1_numpy.py
[ 1 60 72 96 95 29 51  3 68 87]
1 96 56.2 1108.56
1 96 56.2 1108.56
[ 1  3 29 51 60 68 72 87 95 96]
[ 1 60 72 96 95 29 51  3 68 87]
None
[ 1  3 29 51 60 68 72 87 95 96]
读文件: [ 1.  3. 29. 51. 60. 68. 72. 87. 95. 96.]

Process finished with exit code 0

在 C:/AI/AnacondaProject/ 目录下还会看到刚刚生成的 01_numpy_task_2.csv文件。

【注】求均值有3种写法:

np.mean(a), np.average(a),
a.mean(), 但没有a.average()()

3.使用一个股票信息文件的数据,计算最高价和开盘价之差diff,绘出前后两天diff的散点图,研究是否有相关性。
如下载 http://down.licai668.cn/sample/sample_stk_tick.rar

4.画出x值为[0, 10]的正弦函数图像。

import numpy as np
import matplotlib.pyplot as plt

x = np.linspace(0, 10, 100)
y = np.sin(x)

plt.plot(x, y)
plt.show()

运行结果:
在这里插入图片描述
5.生成两组大小为5的数据(数据自选),画出这两组数据水平的条形图,要求采用并列和层叠两种方式。

import numpy as np
import matplotlib.pyplot as plt

x = np.arange(5)

python_attention = [10,50,80,90,95]
php_attention = [30,50,70,80,70]

plt.figure()
plt.barh(x, python_attention, 0.3, color='b')
plt.barh(x+0.3, php_attention, 0.3, color='r')

plt.figure()
plt.barh(x, python_attention, 0.3, color='b')
plt.barh(x, php_attention, 0.3, color='r', left=python_attention)

plt.show()

运行结果:
在这里插入图片描述在这里插入图片描述
6.

  • 随机生成2000个数据,均值为10,方差为3
  • 绘制两个直方图,bins分别为10和50,normed分别为True和False
  • 随机生成x和y,分别2000个,x均值为1,y均值为5
  • 绘制2-D直方图,bins为40个

7.画饼状图。其中labels = ‘BJ’, ‘SH’, ‘GD’, ‘SZ’ 和 fracs = [20, 10, 30, 25],要求:突出显示SZ, 百分比精确到小数点后1位,有阴影。

import matplotlib.pyplot as plt

fracs = [20, 10, 30, 25]
labels = 'BJ', 'SH', 'GD', 'SZ'

explode=[0, 0, 0, 0.05]
plt.pie(x=fracs, labels=labels, explode=explode, autopct='%.1f%%', shadow=True)

plt.show()

运行结果:
在这里插入图片描述
8.随机生成100*5的数组,绘制箱形图,使用sym,whis参数。

import numpy as np
import matplotlib.pyplot as plt

np.random.seed(100)
data = np.random.normal(size=(100, 5), loc=0, scale=1) # 1000行*5列的数组
labels = ['A', 'B', 'C', 'D','E']

plt.boxplot(data, labels=labels, sym='o', whis=1.5)

plt.show()

运行结果:
在这里插入图片描述
9.使用样式字符串绘制两条线:

  • (1)红色,实线,圆点
  • (2)黄色,虚线,三角形点

运行结果:
在这里插入图片描述
10. 创建一个 1*2 的子图区域,并画出不同图形。

import numpy as np
import matplotlib.pyplot as plt

x = np.arange(1, 100)

# 直接法
# 子图函数subplot, sub表子
plt.subplot(121)
plt.plot(x, x*x)

plt.subplot(122)
plt.plot(x, np.log(x))

plt.show()

运行结果:
在这里插入图片描述
11.分别使用plt和面向对象两种方式绘制网络,绿色线,点划线,宽度为1.
法1(plt直接法)

import numpy as np
import matplotlib.pyplot as plt

x = np.arange(0, 2*np.pi, 0.1)

plt.plot(x, np.sin(x))
plt.grid(color='g',linestyle='-.', linewidth=1)

plt.show()

运行结果:
在这里插入图片描述
法2(对象法)

import numpy as np
import matplotlib.pyplot as plt

x = np.arange(0, 2*np.pi, 0.1)

fig = plt.figure()
ax = fig.add_subplot(111)
ax.plot(x, np.sin(x))
ax.grid(color='g',linestyle='-.', linewidth=1)

plt.show()

运行结果同上。

【小技巧】:

以上哪个函数参数想不起来时,可以pycharm编辑器中输入该函数名,然后选中该函数按ctrl再单击,即出来函数的说明

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值