零基础学习数据分析Day03

import numpy as np
import matplotlib.pyplot as mp

n = 1000
x = np.linspace(0,8*np.pi,n)
sin_x = np.sin(x)
cos_x = np.cos(x/2)/2

mp.figure('Fill',facecolor='red') # 填充线  背景颜色
mp.title('Fill',fontsize=18) # 标题
mp.grid(linestyle=":")    # 网格线
mp.plot(x,sin_x,color="dodgerblue",label="sin(x)")  # sinx线的颜色
mp.plot(x,cos_x,color="orangered",label='cos(x)')   # cosx线的颜色

# 绘制填充
mp.fill_between(x,sin_x,cos_x,sin_x>cos_x,color="pink",alpha=0.5)
mp.fill_between(x,sin_x,cos_x,sin_x<cos_x,color="red",alpha=0.5)

mp.legend()   # 图例

mp.show()

绘制柱状图

 

 

import matplotlib.pyplot as mp
import numpy as np

apples = np.array([20,45,26,89,12,58,96])  # 苹果
orange = np.array([15,25,78,89,56,96,53])  # 桔子

mp.figure('Bar Chart',facecolor='lightgray')  # 背景
mp.title('Bar Chart',fontsize = 18)           # 标题
mp.grid(linestyle=':',axis='y')                # 网格线
mp.xlabel('Date',fontsize=14)                   # x轴
mp.ylabel('Volume',fontsize=14)                 # y轴
x = np.arange(apples.size)                      # x轴个数
# mp.bar(x,apples,0.8,label='Apples',color='pink')   # 画条形图
#                    # x轴个数
# mp.bar(x,orange,0.8,label='Oranges',color='red')   # 画条形图

mp.bar(x+0.2,apples,0.4,label='Apples',color='pink')   # 画条形图
                   # x轴个数
mp.bar(x-0.2,orange,0.4,label='Oranges',color='red')   # 画条形图

# 优化刻度
mp.xticks(x,['Jan','Feb','Mar','Apr','May','Jun','Jul'])

mp.legend()                                         # 图例
mp.show()

饼状图

import matplotlib.pyplot as mp
import numpy as np

# 饼状图
# mp.figure('pie',facecolor='lightgray')
# 整理数据
values = [26,17,21,29,11]                                      # 每块的数据
spaces = [0.05,0.01,0.01,0.01,0.01]                            # 间隙
labels = ['Python','Javascript','C++','Java','PHP']             # 每块的名字
colors = ['dodgerblue','orangered','limegreen','violet','gold'] # 每块颜色
mp.figure('Pie',facecolor='lightgrey')                          # 背景
mp.title('Pie',fontsize=20)                                     # 标题
mp.axis('equal')                                                # 等轴比例
mp.pie(                                                         # 绘图
    values,
    spaces,
    labels,
    colors,
    '%.1f%%',        # 格式化输出
    shadow=True    # 加阴影
)
mp.legend()      # 显示图例
mp.show()

等高线图

import matplotlib.pyplot as mp
import numpy as np

n = 1000

# 生成网格化坐标矩阵
x,y = np.meshgrid(np.linspace(-3,3,n),                          # 二维的矩阵x坐标点
                  np.linspace(-3,3,n))                          # 二维的矩阵的y坐标点

# 根据每个网格点坐标,通过某个公式计算z坐标
z = (1 - x/2 + x**5+y**3)*np.exp(-x**2-y**2)
mp.figure('Contour',facecolor='lightgray')
mp.title('Contour',fontsize=20)
mp.xlabel('x',fontsize=14)
mp.ylabel('y',fontsize=14)
mp.tick_params(labelsize=10)                                     #
mp.grid(linestyle=':')
# 绘制等高线
mp.contourf(x,y,z,8,cmap='jet')
cntr = mp.contour(x,y,z,8,colors='pink',linewidths=0.5)
# 为等高线添加高度标签
mp.clabel(cntr,inline_spacing=1,fmt="%.1f",fontsize=10)
mp.show()

3D图像绘制

import matplotlib.pyplot as mp
import numpy as np
from mpl_toolkits.mplot3d import axes3d
import random
# 三维散点图


n = 1000
x = np.random.normal(0,1,n)
y = np.random.normal(0,1,n)
z = np.random.normal(0,1,n)
d = np.sqrt(x**2+y**2+z**2)
mp.figure('3D Scatter')

ax = mp.gca(projection='3d')  # 创建三维坐标系
mp.title('3D Scatter', fontsize=20)

ax.set_xlabel('x', fontsize=14)
ax.set_ylabel('y', fontsize=14)
ax.set_zlabel('z', fontsize=14)
mp.tick_params(labelsize=10)
ax.scatter(x, y, z, s=60, c=d, cmap='jet_r', alpha=0.5)
mp.show()

自定义3D

import matplotlib.pyplot as mp
import numpy as np
from mpl_toolkits.mplot3d import axes3d

n = 1000
# 生成网格化坐标矩阵
x, y = np.meshgrid(np.linspace(-3, 3, n),
                   np.linspace(-3, 3, n))
# 根据每个网格点坐标,通过某个公式计算z高度坐标
z = (1 - x/2 + x**5 + y**3) * np.exp(-x**2 - y**2)
mp.figure('3D', facecolor='lightgray')

ax3d = mp.gca(projection='3d')
mp.title('3D', fontsize=20)
ax3d.set_xlabel('x', fontsize=14)
ax3d.set_ylabel('y', fontsize=14)
ax3d.set_zlabel('z', fontsize=14)
mp.tick_params(labelsize=10)
ax3d.plot_surface(x,y,z,rstride=30,cstride=30, cmap='jet')
mp.show()

绘制线宽3D

import matplotlib.pyplot as mp
import numpy as np
from mpl_toolkits.mplot3d import axes3d

n = 1000
# 生成网格化坐标矩阵
x, y = np.meshgrid(np.linspace(-3, 3, n),
                   np.linspace(-3, 3, n))
# 根据每个网格点坐标,通过公式计算z高度坐标
z = (1 - x/2 + x**5 + y**3) * np.exp(-x**2 - y**2)
mp.figure('3D', facecolor='lightgray')

ax3d = mp.gca(projection='3d')
mp.title('3D', fontsize=20)
ax3d.set_xlabel('x', fontsize=14)
ax3d.set_ylabel('y', fontsize=14)
ax3d.set_zlabel('z', fontsize=14)
mp.tick_params(labelsize=10)
ax3d.plot_wireframe(x,y,z,rstride=30,cstride=30,linewidth=1,
                    color='pink')
mp.show()

简单动画

import numpy as np
import matplotlib.pyplot as mp
import matplotlib.animation as ma

def update(number):
    print(number)

mp.figure('Animation')
anim = ma.FuncAnimation(mp.gcf(),update,interval=1000)
mp.show()

案例

 

import matplotlib.pyplot as mp
import matplotlib.animation as ma
import numpy as np

ball_type = np.dtype([
	('position', float, 2),  # 位置(水平和垂直坐标)
    ('size', float, 1),      # 大小
    ('growth', float, 1),    # 生长速度
    ('color', float, 4)])    # 颜色(红、绿、蓝和透明度)


n = 100
balls = np.zeros(100, dtype=ball_type)
balls['position'] = np.random.uniform(0, 1, (n, 2))
balls['size'] = np.random.uniform(40, 70, n)
balls['growth'] = np.random.uniform(10, 20, n)
balls['color'] = np.random.uniform(0, 1, (n, 4))

mp.figure("Animation", facecolor='lightgray')
mp.title("Animation", fontsize=14)
mp.xticks(())
mp.yticks(())

sc = mp.scatter(
    balls['position'][:, 0],
    balls['position'][:, 1],
    balls['size'],
    color=balls['color'], alpha=0.5)


# 定义更新函数行为
def update(number):
    balls['size'] += balls['growth']
    # 每次让一个气泡破裂,随机生成一个新的
    boom_ind = number % n
    balls[boom_ind]['size'] = np.random.uniform(40, 70, 1)
    balls[boom_ind]['position'] = np.random.uniform(0, 1, (1, 2))
    # 重新设置属性
    sc.set_sizes(balls['size'])
    sc.set_offsets(balls['position'])


# 每隔30毫秒执行一次update更新函数,作用于mp.gcf()当前窗口对象
# mp.gcf():	获取当前窗口
# update:		更新函数
# interval:	间隔时间(单位:毫秒)
anim = ma.FuncAnimation(mp.gcf(), update, interval=30)
mp.show()

绘制信号曲线:y=sin(2 * π * t) * exp(sin(0.2 * π * t))

import matplotlib.pyplot as mp
import numpy as np
import matplotlib.animation as ma

mp.figure("Signal", facecolor='lightgray')
mp.title("Signal", fontsize=14)
mp.xlim(0, 10)
mp.ylim(-3, 3)
mp.grid(linestyle='--', color='lightgray', alpha=0.5)
pl = mp.plot([], [], color='dodgerblue', label='Signal')[0]
pl.set_data([],[])

x = 0

def update(data):
	t, v = data
	x, y = pl.get_data()
	x.append(t)
	y.append(v)
	#重新设置数据源
	pl.set_data(x, y)
	#移动坐标轴
	if(x[-1]>10):
		mp.xlim(x[-1]-10, x[-1])

def y_generator():
	global x
	y = np.sin(2 * np.pi * x) * np.exp(np.sin(0.2 * np.pi * x))
	yield (x, y)
	x += 0.05

anim = ma.FuncAnimation(mp.gcf(), update, y_generator, interval=20)
mp.tight_layout()
mp.show()


 

import matplotlib.pyplot as mp
import numpy as np
import datetime as dt
import matplotlib.dates as md
# 日期转换函数
def dmy2ymd(dmy):
	dmy = str(dmy, encoding='utf-8')
	time = dt.datetime.strptime(dmy, '%d-%m-%Y').date()
	t = time.strftime('%Y-%m-%d')
	return t

dates,opening_prices,highest_prices,lowerst_prices,closing_pirce =np.loadtxt('/home/tarena/aid1907/data/day03/aapl.csv',
                                                                          delimiter=',',
                                                                          usecols=(1,3,4,5,6),
                                                                          dtype='M8[D],f8,f8,f8,f8',
                                                                          unpack=True,
                                                                          converters={1:dmy2ymd})
# print(dates)
# 画图
mp.figure('AAPL',facecolor='lightgray')
mp.title('AAPL',fontsize=18)
mp.grid(linestyle=':')
mp.xlabel('Date',fontsize=14)
mp.ylabel('Closing Price',fontsize=14)
# 设置刻度定位器
ax = mp.gca()
ax.xaxis.set_major_locator(md.WeekdayLocator(byweekday=md.MO))
ax.xaxis.set_minor_locator(md.DayLocator())
ax.xaxis.set_major_formatter(md.DateFormatter('%Y/%m/%d'))


mp.plot(dates,closing_pirce,color='pink',
                            linewidth=2,
                            linestyle='--',
                            label='closing')

mp.gcf().autofmt_xdate()   # 刻度为斜线
mp.legend()
mp.show()

 

 

 

 

 

 

 

 

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值