python——plotly精美制图

plotly

plotly是基于Javascript的绘图库,效果美观;可以和web无缝连接;该库默认的绘图结果是一个HTML网页文件,可通过浏览器查看。(不支持DataFrame格式)使用这个库创立图的方式是,主要的是使用1、go.Scatter()建立图轨,2、然后go.Layout()设置图层,3、再用go.Figure()将图轨和图层合并,4、最后使用py.offline.iplot(fig)显示出来,fig是前一步的返回值

离线绘图:plotly.offline.iplot()、plotly.offline.plot()

plotly.offline.iplot():方法绘制的图形,在Jupyter Notebook中直接查看
plotly.offline.plot():会在本地新建一个HTML文件,并可选择是否在浏览器中打开

import os
import plotly as py
import plotly.graph_objs as go
from plotly.graph_objs import Scatter


os.chdir(r'C:\Users\MAR\Desktop\test')

#添加图轨数据
trace0=Scatter(x=[1,2,3,4],y=[10,15,13,17])
trace1=Scatter(x=[1,2,3,4],y=[6,7,5,9])
data=[trace0,trace1]

py.offline.plot(data,filename='fth.html')

产生的html的图像如下
在这里插入图片描述

绘制散点图和折线图

散点图和折线图的不同就是go.Scatter()中的mode不同,当mode为lines时就是折线图,当是markers时,表示散点图

go.Scatter(x,y,mode,name,marker,line)

将数据进行封装,返回x,y,线形和图像标签的封装
参数:
x、y:数据(横和纵坐标)
mode:线条类型
name:图例名称
marker:控制点的相关参数
line:控制线条颜色,宽度等

pyplot=py.offline.iplot
trace0=Scatter(x=data.地区,y=data.收入,mode='lines',name='收入',\
              line={'width': 2, 'color': 'green'})
trace1=Scatter(x=data.地区,y=data.总收入,mode='lines',name='总收入',\
              line={'width': 2, 'color': 'black'})

data_source=[trace0,trace1]
pyplot(data_source)

在这里插入图片描述

go.Layout()

对图进行修饰,添加标签和轴名称等,

pyplot=py.offline.iplot
trace0=Scatter(x=data.地区,y=data.收入,mode='lines',name='收入',\
              line={'width': 2, 'color': 'green'})
trace1=Scatter(x=data.地区,y=data.总收入,mode='lines',name='总收入',\
              line={'width': 2, 'color': 'black'})
              
data_source=[trace0,trace1]  #组合成数据轨
#设置图层
layout=go.Layout(title='总收入',xaxis=dict(title='这是一个x轴标题'),legend=dict(x=1,y=0.5),\
                 yaxis=dict(title='这是一个y的标题'),\
                 font=dict(size=15,color='red'))
 #将数轨和图层合成figure               
fig=go.Figure(data=data_source,layout=layout)
pyplot(fig) #打印输出figure

在这里插入图片描述

绘制柱状图

无堆叠的

单一列的柱状图
data=pd.read_csv(r'my_csv_date.csv',encoding='gbk')
pyplot=py.offline.iplot
region=data.地区.value_counts()
print (region) #对地区列的数据出现次数进行统计
#第一步得到图的主要参数,xy必须时列表,opacity控制透明度
trace=[go.Bar(x=region.index.tolist(),y=region.values.tolist(),
             marker=dict(color=['red','blue','green','gray','darkblue']),opacity=0.9)]
#第二步设置图像的图例标签等
layout=go.Layout(title='不同地区的统计',xaxis=dict(title='地区'))
#第三步将第一第二步合成图片
figure=go.Figure(data=trace,layout=layout)
#第四步显示
pyplot(figure)

在这里插入图片描述

多列的数据柱状图
ata=pd.read_csv(r'my_csv_date.csv',encoding='gbk')
pyplot=py.offline.iplot
#先使用‘交通方式’作为分类标准,
d1=data[data.交通方式=='交通1']
d2=data[data.交通方式=='交通2']
d3=data[data.交通方式=='交通3']
#再将每种交通分类的地区作为x轴,收入作为y,对应图轨命名
trace1=go.Bar(x=d1.地区,y=d1.收入,name='第一种交通方式')
trace2=go.Bar(x=d2.地区,y=d2.收入,name='第二种交通方式')
trace3=go.Bar(x=d3.地区,y=d3.收入,name='第三种交通方式')
trace=[trace1,trace2,trace3]

layout=go.Layout(title='不同地区交通的收入',xaxis=dict(title='地区'))

figure=go.Figure(data=trace,layout=layout)


pyplot(figure)

在这里插入图片描述

有堆叠柱状图

相比于上一个程序,只是在命令中多了,一个(barmode=‘stack’)

data=pd.read_csv(r'my_csv_date.csv',encoding='gbk')
pyplot=py.offline.iplot

d1=data[data.交通方式=='交通1']
d2=data[data.交通方式=='交通2']
d3=data[data.交通方式=='交通3']

trace1=go.Bar(x=d1.地区,y=d1.收入,name='第一种交通方式')
trace2=go.Bar(x=d2.地区,y=d2.收入,name='第二种交通方式')
trace3=go.Bar(x=d3.地区,y=d3.收入,name='第三种交通方式')
trace=[trace1,trace2,trace3]

layout=go.Layout(title='不同地区交通的收入',xaxis=dict(title='地区'),barmode='stack')

figure=go.Figure(data=trace,layout=layout)

pyplot(figure)

在这里插入图片描述

直方图

data=pd.read_csv(r'my_csv_date.csv',encoding='gbk')
pyplot=py.offline.iplot

figure=[go.Histogram(x=data.地区,histnorm='probability',
                     marker=dict(color=['blue','yellow','green','red']))]

pyplot(figure)

在这里插入图片描述

饼图

data=pd.read_csv(r'my_csv_date.csv',encoding='gbk')
pyplot=py.offline.iplot
#先对数据分组,并按照求和进行聚合
data1=data.groupby(by='地区')
data2=data1.agg(np.sum)

trace=[go.Pie(labels=data2.index.tolist(),values=data2.收入.tolist(),
              hole=0.1,textfont=dict(size=12,color='white'))]

layout=go.Layout(title='不同地区的收入')

fig=go.Figure(data=trace,layout=layout)

pyplot(fig)

在这里插入图片描述

发布了70 篇原创文章 · 获赞 1 · 访问量 2404

猜你喜欢

转载自blog.csdn.net/weixin_43794311/article/details/105326655