数据可视化实战项目(函数积分图,散点-条形图,球员能力图,股票K线图)

函数积分图

import matplotlib.pyplot as plt
import numpy as np
from matplotlib.patches import Polygon

def func(x):
    return -(x-2)*(x-8)+40

x =np.linspace(0,10)
y = func(x)

fig,ax = plt.subplots()

plt.plot(x,y,'r',linewidth = 2)

#确定a,b点
a = 2
b = 9
ax.set_xticks([a,b])
ax.set_yticks([])
ax.set_xticklabels(['$a$','$b$'])
#产生x1,x2之间的N点行线性的矢量即画两条竖线
ix = np.linspace(a,b)
iy = func(ix)

ixy = zip(ix,iy)
#生成多边形的点
verts = [(a,0)]+list(ixy)+[(b,0)]
#生成多边形的对象
poly = Polygon(verts,facecolor='0.9',edgecolor='0.5')

ax.add_patch(poly)

plt.figtext(0.9,0.05,'&x$')
plt.figtext(0.1,0.9,'$y$')
#画数学公式
#定位置
x_math = (a+b)*0.5
y_math = 35
#画公式
plt.text(x_math,y_math,r'$\int_a^b(-(x-2)*(x-8)+40)dx$',fontsize=15,horizontalalignment = 'center')
#调节y值
plt.ylim(ymin=25)
plt.show()

在这里插入图片描述

散点-条形图

import matplotlib.pyplot as plt
import numpy as np
from matplotlib.patches import Polygon
#定义画布类型
plt.style.use('ggplot')

x = np.random.randn(200)
y = x+np.random.randn(200)*0.5
#定空白画布高度
margin_border = 0.1
width = 0.6
margin_between = 0.02
height = 0.2
#定义三个图的坐标
left_s=margin_border
bottom_s = margin_border
height_s = width
width_s = width

left_x=margin_border
bottom_x = margin_border+width+margin_between
height_x = height
width_x = width

left_y =  margin_border+width+margin_between
bottom_y = margin_border
height_y = width
width_y = height

#生成画布
plt.figure(1,figsize=(8,8))

rect_s = [left_s,bottom_s,width_s,height_s]
rect_x = [left_x,bottom_x,width_x,height_x]
rect_y = [left_y,bottom_y,width_y,height_y]

axScatter = plt.axes(rect_s)
axHisX = plt.axes(rect_x)
axHisY = plt.axes(rect_y)

#去掉多于的坐标值
axHisX.set_xticks([])
axHisY.set_yticks([])
#散点图
axScatter.scatter(x,y,color = 'b')
#画上方和右方条形图
#固定间距(得精确宽度值)
bin_width = 0.25
xymax = np.max([np.max(np.fabs(x)),np.max(np.fabs(y))])
lim = int(xymax/bin_width+1)*bin_width

axScatter.set_xlim(-lim,lim)
axScatter.set_ylim(-lim,lim)

bins = np.arange(-lim,lim+bin_width,bin_width)
axHisX.hist(x,bins = bins)
axHisY.hist(y,bins = bins,orientation = 'horizontal')

axHisX.set_xlim(axScatter.get_xlim())
axHisY.set_ylim(axScatter.get_ylim())

plt.title('Sccatter and Hist')
plt.show()

在这里插入图片描述

球员能力图

import matplotlib.pyplot as plt
import numpy as np
from matplotlib.font_manager import FontProperties
#设置样式
plt.style.use('ggplot')
#定义字体
font = FontProperties(fname = r'c:\windows\fonts\simsun.ttc',size = 13)
#生成第一个图六项技能
ability_size = 6
ability_label =[u'进攻',u'防守',u'盘带',u'速度',u'体力',u'射术']

#极坐标的图
ax1 = plt.subplot(221,projection = 'polar')
ax2 = plt.subplot(222,projection = 'polar')
ax3 = plt.subplot(223,projection = 'polar')
ax4 = plt.subplot(224,projection = 'polar')

#生成四个图的六个值
player = {
    'M': np.random.randint(size=ability_size, low=60, high=99),
    'H': np.random.randint(size=ability_size, low=60, high=99),
    'P': np.random.randint(size=ability_size, low=60, high=99),
    'Q': np.random.randint(size=ability_size, low=60, high=99),
}
#生成角度值
theta = np.linspace(0,2*np.pi,6,endpoint = False)
#加一个值使其首位闭合为封闭图形
theta = np.append(theta,theta[0])
#将其与原六个值拼接在一起
player['M']=np.append(player['M'],player['M'][0])
#绘制一个首尾相接的图
ax1.plot(theta,player['M'],'r')
#填充图形

ax1.fill(theta,player['M'],'r',alpha = 0.3)
#把图形角度标签六等分
ax1.set_xticks(theta)
#把角度标签去掉后换为汉字标签
ax1.set_xticklabels(ability_label,x=0.7,fontproperties = font)
#加上标题title
ax1.set_title(u'梅西',position = (0.5,1.01),fontproperties = font,color = 'r',size = 20)
#强行定义极坐标的值
ax1.set_yticks([20,40,60,80,100])

#将其与原六个值拼接在一起
player['H']=np.append(player['H'],player['H'][0])
#绘制一个首尾相接的图
ax2.plot(theta,player['H'],'g')
#填充图形
ax2.fill(theta,player['H'],'g',alpha = 0.3)
#把图形角度标签六等分
ax2.set_xticks(theta)
#把角度标签去掉后换为汉字标签
ax2.set_xticklabels(ability_label,x=0.7,fontproperties = font)
#加上标题title
ax2.set_title(u'哈维',position = (0.5,1.01),fontproperties = font,color = 'g',size = 20)
#强行定义极坐标的值
ax2.set_yticks([20,40,60,80,100])

#将其与原六个值拼接在一起
player['P']=np.append(player['P'],player['P'][0])
#绘制一个首尾相接的图
ax3.plot(theta,player['P'],'b')
#填充图形
ax3.fill(theta,player['P'],'b',alpha = 0.3)
#把图形角度标签六等分
ax3.set_xticks(theta)
#把角度标签去掉后换为汉字标签
ax3.set_xticklabels(ability_label,x=0.7,fontproperties = font)
#加上标题title
ax3.set_title(u'皮克',position = (0.5,1.01),fontproperties = font,color = 'b',size = 20)
#强行定义极坐标的值
ax3.set_yticks([20,40,60,80,100])

#将其与原六个值拼接在一起
player['Q']=np.append(player['Q'],player['Q'][0])
#绘制一个首尾相接的图
ax4.plot(theta,player['Q'],'y')
#填充图形
ax4.fill(theta,player['Q'],'y',alpha = 0.3)
#把图形角度标签六等分
ax4.set_xticks(theta)
#把角度标签去掉后换为汉字标签
ax4.set_xticklabels(ability_label,x=0.7,fontproperties = font)
#加上标题title
ax4.set_title(u'梅西',position = (0.5,1.01),fontproperties = font,color = 'y',size = 20)
#强行定义极坐标的值
ax4.set_yticks([20,40,60,80,100])

plt.show()

在这里插入图片描述

股票K线图

import os
import pandas as pd
import matplotlib.pyplot as plt
import mpl_finance as mpf
from pandas.plotting import register_matplotlib_converters
register_matplotlib_converters()

# 设置总体样式
plt.style.use("ggplot")

# 数据来源
data = pd.read_csv(r'000001.csv', index_col='Date', parse_dates=True)

# 单独取出volume数据绘图使用
vol = data['Volume']

# 设置两个图的位置
left, width = 0.1, 0.8
rect_vol = [left, 0.1, width, 0.3]
rect_main = [left, 0.46, width, 0.5]

# 创建画布
fig = plt.figure()

# 添加两个坐标轴
ax_vol = fig.add_axes(rect_vol)
ax_main = fig.add_axes(rect_main)

# 填充volume图
ax_vol.fill_between(vol.index, vol.values, color='y')

# 设置x轴显示样式
plt.setp(ax_vol.get_xticklabels(), rotation=30, horizontalalignment='right')

# 替换timestamp to float
main_data = []
for d in data.reset_index().values:
    d[0] = d[0].timestamp()
    main_data.append((d[0], d[1], d[2], d[3], d[4]))

print(main_data)
# 绘制蜡烛图
mpf.candlestick_ohlc(ax_main, main_data, width=30000, colorup='r', colordown='g')

plt.xticks([])
plt.show()

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值