数据可视化学习---plotly基本图形(一)之散点图、折线图、柱状图

包的安装在这里就不介绍了
以下代码都是在jupyter notebook中运行测试
这里采用的是离线模式
在线模式的使用请自行百度

下面直接进入主题

1. 散点、折线图

  • 1.1 散点图
  • 1.2 折线图
  • 1.3 点线图
  • 1.4 整合演示

2. 柱状图

  • 2.1 普通单柱状图
  • 2.2 柱状簇
  • 2.3 层叠柱状图
  • 2.4 相对堆叠柱状图
  • 2.5 瀑布式柱状图
  • 2.6 柱状图颜色与样式的设置

1.散点、折线图

1.1 纯散点图

# -*- coding: utf-8 -*-

import plotly.offline as of
import numpy as np
import plotly.graph_objs as go
import plotly

# 生成1000个符合标准正态分布的数
random_x = np.random.randn(100)
random_y = np.random.randn(100)

# 传入数据来源,选择图形模式
trace = go.Scatter(
    x = random_x,
    y = random_y,
    mode = 'markers',# 纯散点图
    marker=dict(
    size=10, # 设置点的宽度
    color = 'rgba(255, 182, 193, .9)', # 设置点的颜色
    line = dict( # 设置点外围的线的样式
        width = 1,
        color = 'blue'
    )
  )

)
'''
marker ----> 图形的样式,可单个数据使用或者字典
'''
# 传入绘图数据
data = [trace]

# 绘图
# of.plot(data)
'''将graph部分和layout部分组合成figure对象'''
fig = go.Figure(data=data)

'''启动绘图直接绘制figure对象'''
plotly.offline.init_notebook_mode()
plotly.offline.iplot(fig,filename='basic-scatter')
#上面两行代码可以用fig.show()代替,同样可以在jupyter中显示图表

在这里插入图片描述

1.2折线图

# 生成1000个符合标准正态分布的数
random_x = np.linspace(0, 1, 100)
random_y = np.random.randn(100)-5

# 传入数据来源,选择图形模式
trace = go.Scatter(
    x = random_x,
    y = random_y,
    mode = 'lines', # 折线图
    name = 'lines',
    line = dict(
        color = 'rgba(255, 182, 193)',
        width = 1
    )
#     marker=dict(
#     size='16',
#     color = np.random.randn(500)
#     colorscale=colorscale,
#     showscale=True
#   )

)
'''
marker ----> 图形的样式,可单个数据使用或者字典
'''
# 传入绘图数据
data = [trace]

# 绘图
# of.plot(data)
'''将graph部分和layout部分组合成figure对象'''
fig = go.Figure(data=data)

'''启动绘图直接绘制figure对象'''
plotly.offline.init_notebook_mode()
plotly.offline.iplot(fig,filename='basic-scatter')

在这里插入图片描述

1.3点线图

# 生成1000个符合标准正态分布的数
random_x = np.linspace(0, 1, 100)
random-y2 = np.random.randn(100)-5

# 传入数据来源,选择图形模式
trace = go.Scatter(
	x = random_x,
	y = random_y2,
	mode = 'lines+markers',  # 点线结合的模式
	name = 'lines+markers'  
)
# 传入绘图数据
data = [trace]
# 绘图
fig = go.Figure(data=data)
'''启动绘图直接绘制figure对象'''
plotly.offline.init_notebook_mode()
plotly.offline.iplot(fig)

在这里插入图片描述

1.4整合

#Scatter三张种基本画法
import plotly.graph_objs as go
import numpy as np
import plotly.offline as of

n = 100
random_x = np.linspace(0, 1, n)
random_y0 = np.random.randn(n)+5
random_y1 = np.random.randn(n)
random_y2 = np.random.randn(n)-5

trace0 = go.Scatter(
	x = random_x,
	y = random_y0,
	mode = 'markers',
	name = 'markers'
)
trace1 = go.Scatter(
	x = random_x,
	y = random_y1,
	mode = 'lines',
	name = 'lines'
)
trace2 = go.Scatter(
	x = random_x,
	y = random_y2,
	mode = 'lines+markers',
	name = 'lines+markers'
)
data = [trace0, trace1, trace2]

fig = go.Figure(data = data)
of.init_notebook_mode()
of.iplot(fig)

在这里插入图片描述

2.柱状图

2.1普通单柱状图

# -*- coding: utf-8 -*-
import plotly.offline as of
import plotly.graph_objs as go

trace = go.Bar(
	x = ['a', 'b', 'c', 'd', 'e'],
    y = [1, 3, 2, 5, -2]
)
# layout
layout = go.Layout(
	title = 'basic Bar',
	xaxis = {'title': 'x轴'} # 设置x轴, y同理
)
# Figure
data = [trace]
fig = go.Figure(data = data, layout = layout)

fig.show()

在这里插入图片描述

2.2柱状簇

# 柱状簇
# Trace
trace_1 = go.Bar(
    x = ["西南石油", "东方明珠", "海泰发展"],
    y = [4.12, 5.32, 0.60],
    name = '201609'
    )
trace_2 = go.Bar(
    x = ["西南石油", "东方明珠", "海泰发展"],
    y = [3.65, 6.14, 0.58],
    name = '201612'
    )
trace_3 = go.Bar(
    x = ["西南石油", "东方明珠", "海泰发展"],
    y = [2.15, 1.35, 0.19],
    name = '201703'
    )
trace = [trace_1, trace_2, trace_3]
# Layout
layout = go.Layout(
    title = '净资产收益率对比图'
    )
# Figure
fig = go.Figure(data = trace, layout = layout)

fig.show()

在这里插入图片描述

2.3层叠柱状图

关键参数:
layout中的barmode参数的值为’stack’
数据含有负数时使用相对堆叠柱状图比较合适

# Stacked Bar Chart
trace_1 = go.Bar(
 x = ['深证50', '上证50', '西南50', '西北50','华中50'],
 y = [0.7252, 0.9912, 0.5347, 0.4436, 0.9911],
 name = '股票投资'
)
  
trace_2 = go.Bar(
 x = ['深证50', '上证50', '西南50', '西北50','华中50'],
 y = [0.2072, 0, 0.4081, 0.4955, 0.02],
 name='其它投资'
)
  
trace_3 = go.Bar(
 x = ['深证50', '上证50', '西南50', '西北50','华中50'],
 y = [0, 0, 0.037, 0, 0],
 name='债券投资'
)
  
trace_4 = go.Bar(
 x = ['深证50', '上证50', '西南50', '西北50','华中50'],
 y = [0.0676, 0.0087, 0.0202, 0.0609, 0.0087],
 name='银行存款'
)

trace = [trace_1, trace_2, trace_3, trace_4]
layout = go.Layout(
    title = '基金资产配置比例图',
    barmode = 'stack'  # 堆叠柱状图
)

fig = go.Figure(data = trace, layout = layout)
of.init_notebook_mode()
of.iplot(fig)

在这里插入图片描述

2.4相对堆叠柱状图

barmode ----> ‘stack’和’relative’

trace1 = {
    'x': [1, 2, 3, 4],
    'y': [1, 4, 9, 16],
    'name': 'Trace1',
    'type': 'bar'
}
trace2 = {
    'x': [1, 2, 3, 4],
    'y': [6, -8, -4.5, 8],
    'name': 'Trace2',
    'type': 'bar'
}
trace3 = {
    'x': [1, 2, 3, 4],
    'y': [-15, -3, 4.5, -8],
    'name': 'Trace3',
    'type': 'bar'
}
trace4 = {
    'x': [1, 2, 3, 4],
    'y': [-1, 3, -3, -4],
    'name': 'Trace4',
    'type': 'bar'
}
data = [trace1, trace2, trace3, trace4]

layout = {
  'xaxis': {'title': '横轴'},
  'yaxis': {'title': '纵轴'},
  'barmode': 'relative', # 相对堆叠条形图
  'title': '相对堆叠条形图'
}
'''
barmode ----> 'stack'和'relative'
'''
fig = go.Figure(data = data, layout=layout)

fig.show()

在这里插入图片描述

2.5瀑布式柱状图

底层悬空部分是完全透明的柱条

# 瀑布式柱状图
x_data = ['资产1', '资产2',
  '资产3','资产4', '总资产']
y_data = [56000000, 65000000, 65000000, 81000000, 81000000]
text = ['666,999,888万元', '8,899,666万元', '88,899,666万元', '16,167,657万元', '888,888,888万元']
  
# Base
trace0 = go.Bar(
 x=x_data,
 y=[0, 57999848, 0, 66899764, 0],
 marker=dict(
 color='rgba(1,1,1, 0.0)',
 ),
    name = '123'
)
# Trace
trace1 = go.Bar(
 x=x_data,
 y=[57999848, 8899916, 66899764,16167657, 83067421],
 marker=dict(
 color='rgba(55, 128, 191, 0.7)',
 line=dict(
  color='rgba(55, 128, 191, 1.0)',
  width=2,
 )
 ),
    name='aaa'
)
  
data = [trace0, trace1]
layout = go.Layout(
 title = '瀑布式柱状图',
 barmode='stack',
 showlegend=False
)
  
annotations = []
  
for i in range(0, 5):
 annotations.append(dict(x=x_data[i], y=y_data[i], text=text[i], # 坐标和要注释的文字
     font=dict(family='Arial', size=14, # 字体样式
     color='red'),
     showarrow=False,)) # 是否带有箭头
 layout['annotations'] = annotations # 添加注释文字
  
fig = go.Figure(data=data, layout=layout)
of.init_notebook_mode()
of.iplot(fig)

在这里插入图片描述

2.6柱状图颜色与样式的设置

# 柱状图颜色与样式的设置
volume = [0.49,0.71,1.43,1.4,0.93]
width = [each*3/sum(volume) for each in volume]

trace0 = go.Bar(
    x = ['AU.SHF', 'AG.SHF', 'SN.SHF','PB.SHF', 'CU.SHF'],
    y = [0.85, 0.13, -0.93, 0.46, 0.06],
    width = width,
    marker = dict(
        color=['rgb(205,38,38)', 'rgb(205,38,38)','rgb(34,139,34)', 'rgb(205,38,38)','rgb(205,38,38)'],
        line=dict(
            color='rgb(0,0,0)',
            width=1.5
        )
    ),
    opacity=0.8
)

data = [trace0]
layout = go.Layout(
    title = '有色金属板块主力合约日内最高涨幅与波动率图',
    xaxis=dict(tickangle=-45),
    xaxis_rangeslider_visible=True # 显示x轴下方的可滑动视图
)

fig = go.Figure(data=data, layout=layout)
of.init_notebook_mode()
of.iplot(fig)

在这里插入图片描述

发布了38 篇原创文章 · 获赞 3 · 访问量 3148

猜你喜欢

转载自blog.csdn.net/weixin_44941795/article/details/100165972