可视化神器--plotly入门到精通

plotly入门

数据分析离不开数据可视化。我们最常用的就是pandas,matplotlib,pyecharts以及Tableau,感觉都很普通,如今入门的Plotly制图后,感觉整体绘制都很不错。
Plotly 是一款用来做数据分析和可视化的在线平台,功能非常强大,可以在线绘制很多图形比如条形图、散点图、饼图、直方图等等。而且还是支持在线编辑,以及多种语言python、javascript、matlab、R等许多API。它在python中使用也很简单,直接用pip install plotly就可以了。推荐最好在jupyter notebook中使用,pycharm操作不是很方便。使用Plotly可以画出很优美的图像,是数据可视化的一款神器。
(ps:自从接触plotly之后,真的慢慢的发现matplotlib的鸡肋,再见matplotlib,你好plotly!)


  • 在这里我们使用JupyterLab进行如下操作。
  • 本节课所有的csv文件会放到百度网盘中。

百度网盘链接:
https://pan.baidu.com/s/1VTtxeWqscH3O3T4opUGHBw
提取码:3rxw


首先使用Ancona下载Plotly,命令行输入
pip install Plotly -i https://pypi.douban.com/simple
下载完进入JupyterLab,测试一下下载的Plotly的下载情况以及版本。
测试
看到版本号说明plotly已经安装完成,导入pandas环境,读取csv文件。

import plotly.graph_objects as go
import pandas as pd
# 导入nz_weather数据集进行测试
data = pd.read_csv('data/nz_weather.csv')
# Scatter画线或者画点,x参数为x坐标,y参数位y坐标,name为多条线的取名
line1 = go.Scatter(x=data['DATE'], y=data['Auckland'], name='Auckland')
line2 = go.Scatter(x=data['DATE'], y=data['Wellington'], name='Wellington')
# 将两条线保存到fig参数中
fig  = go.Figure([line1, line2])
# 画画的文字说明
fig.update_layout(
    title = "New Zealand Weather", # 图片的title
    xaxis_title = "Date", # X轴的title
    yaxis_title = "Weather" # Y轴的title
)
# 画画
fig.show()

输出图片


Bar Chart

  • 因为数据量过大的原因,将data_2010取出一部分作为画柱状图的例子展示。
# data的数据切割获取数据
data_2010 = data[(data['DATE'] >= '2010-01') & (data['DATE'] < '2011-01')]
# Bar为画柱状图,x参数为X轴,y参数为Y轴,text为显示的数字,textposition为显示数字的位置(外部还是内部)
bar1 = go.Bar(x = data_2010['DATE'], y = data_2010['Auckland'], text = data_2010['Auckland'], textposition='outside', name='Auckland')
bar2 = go.Bar(x = data_2010['DATE'], y = data_2010['Wellington'], text = data_2010['Wellington'], textposition='outside', name='Wellington')
# 将两个柱状图保存到fig参数中。
fig = go.Figure([bar1, bar2])
# 画画
fig.show()

输出图片


Histogram

此柱状图会对该区间的值进行一个统计。若想对某一段维度进行统计,则需要使用Histogram。

# Histogram内参数表示想统计某一段维度的取值
hist = go.Histogram(x = data['Auckland'])
# xbins参数表示每多少统计一次区间
hist = go.Histogram(x = data['Auckland'], xbins={'size': 10})
# 将柱状图保存到fig参数中。
fig = go.Figure(hist)
# 柱状图因为贴的过密,增加每柱之间的间隔
fig.update_layout(bargap=0.5)
# 画画
fig.show()

输出图片


读取鸢尾花进行数据分析可视化,老规矩读取前五行数据监测数据是否存在问题并查看数据头信息。

import plotly.graph_objects as go
import pandas as pd
# 读取鸢尾花数据集
data = pd.read_csv('data/iris.csv')
# Scatter画散点图,mode参数为markers仅保留点值
points = go.Scatter(x = data['SepalLength'], y = data['SepalWidth'], mode='markers')
fig = go.Figure(points)
fig.show()

输出图片


3D画图

导入3d-line1.csv并检查。可以看到其中有X、Y、Z、color的头部信息,我们想要拿到xyz值画出3D图片。

import plotly.graph_objects as go
import pandas as pd
# 导入3d-line1数据集
data = pd.read_csv('data/3d-line1.csv')
# Scatter3d画出三维线最简单方法。
line1 = go.Scatter3d(x = data['x'], y = data['y'], z = data['z'])
#mode='markers'只要线不要点,mode='markers'只要点不要线,marker参数中表示画画的样式
line2 = go.Scatter3d(x = data['x'], y = data['y'], z = data['z'], mode='markers', marker={'size': 3, 'color': 'red'})
fig = go.Figure(line2)
fig.show()

输出图片


只通过Z值画出3D图像

首先在这里还是导入已有的数据集mt_bruno_elevation.csv作为测试对象,通过head()我们获得了该csv的数据,接下来可以使用value返回数组中的所有值呈现为二维数组的样子。

import plotly.graph_objects as go
import pandas as pd
# 读取mt_bruno_elevation数据集
data = pd.read_csv('./data/mt_bruno_elevation.csv')
# 删除无用列
del data['index']
# 将height作为z值处理
height = data.values
# 在这里我们仅仅给出z一个参数进行3D画图
surface = go.Surface(z = height)
fig = go.Figure(surface)
fig.show()

输出图片


自由画3D图像

以上表示出给出xyz值才能画出某些图像,我们可否通过某些函数算法来让plotly画出该有的图像?

  • 在这里我们使用z = x2 +y2进行演示
import numpy as np
x = np.arange(-5, 6)
y = np.arange(-5, 6)
xv, yv = np.meshgrid(x, y)
print(xv,yv)# 获得-5到+5的XY平面坐标系的所有取值情况点
z = xv**2 + yv**2 # 表达式赋值
# XYZ三者赋值给出当前图像的样式
surface = go.Surface(x = xv, y = yv, z = z)
fig = go.Figure(surface)
fig.show()

输出数据


对世界地图的改进绘制

例如当前全球关注的重点话题–新型冠状病毒来说,我们最需要的是世界地图以及每个区域上的具体患者人数。

  • plotly可以更好地帮助我们使用世界地图进行绘制。
import plotly.graph_objects as go
import pandas as pd
# 读取earthquakes文件进行演示
data = pd.read_csv('data/earthquakes.csv')
# Densitymapbox可绘制地图,lat为精确纬度,lon为精度,radius为每一个点的半径大小
my_map = go.Densitymapbox(lat=data['Latitude'], lon=data['Longitude'], z=data['Magnitude'], radius=4)
fig = go.Figure(my_map)
# 图形的样式为世界地图
fig.update_layout(mapbox_style="open-street-map")
fig.show()

输出图片


plotly.express

画图的进阶工具

import plotly.express as px
# 读取iris数据进行测试
data = pd.read_csv('data/iris.csv')
# data为要选择的数组,color='Name'以名字为分割填充颜色
fig = px.scatter(data, x = 'SepalLength', y = 'SepalWidth',color='Name')
fig.show()
#########
# dimensions中放入想添加的维度信息,方可获得全部可能出现的情况
fig = px.scatter_matrix(data, dimensions=['SepalLength', 'SepalWidth', 'PetalLength', 'PetalWidth'],color='Name')
fig.show()
#########
# 3D画图样式,color参数直接获取color的值进行画图颜色区分
data = pd.read_csv('data/3d-line1.csv')
fig = px.scatter_3d(data, x='x', y='y', z='z', color='color')
fig.show()
  • 第一幅图展示:
    输出图片
  • 第二幅图展示:
    输出图片

发布了13 篇原创文章 · 获赞 25 · 访问量 1495

猜你喜欢

转载自blog.csdn.net/qq_45414559/article/details/105163901