matplotlib绘图与实战以及pyecharts的简单使用

matplotlib绘图与实战以及pyecharts的简单使用

首先,导入需要的模块

import numpy as np
import matplotlib.pyplot as plt
# 用  处理中文,正常显示
plt.rcParams['font.sans-serif']=['SimHei']
#处理 负号,正常显示
plt.rcParams['axes.unicode_minus']=False
import pandas as pd
from pandas import Series,DataFrame

实战1-制作季度销售表

其中,横坐标为1-4个季度,显示网格,填写标题,设置图柱上面的文字

# 取出一张图纸
plt.figure(1)
#确定图像的位置
#subplot(xyz),长宽,画布的第几个
ax1 = plt.subplot(111)
#准备数据
data = np.array([15,20,18,25])
x_bar = np.arange(4)

rect = ax1.bar(x=x_bar,height=data,width=0.5,color='#add86e')

#使用循环,给每一个柱子设置文字的起点位置
for i in rect:
    x = i.get_x()
    #print(x)
    height = i.get_height()
    #print(height)
    
    #设置 bar柱上的文字
    #语法: ax1.text(x,y,str)
    ax1.text(x+0.15,height+0.2,str(height)+'W')
#设置x轴
ax1.set_xticks(x_bar)
ax1.set_xticklabels(["第一季度","第二季度","第三季度","第四季度"])
#ax1.set_xlabel和plt_xlabel是一样的含义
ax1.set_ylabel('销售(单位:万/件)')
ax1.set_title("2017季度销售表")
ax1.grid(True)#显示网格
ax1.set_ylim(0,30)#设置y轴的范围
plt.show()

结果显示:
matplotlib绘图与实战以及pyecharts的简单使用_第1张图片

同画布上绘制多图形

在同一块画布上创建两个图形

#新建一张画布
#设置画布大小,以及像素
plt.figure(figsize=(6,6),dpi=80)
plt.figure(1)
plt.subplot(211)#划分eow column 以及 index定位
plt.plot([1,2,3],[1,2,3])
plt.title("画板1:画布1")
plt.subplot(212)
plt.plot([1,2,3],[1,2,3])
plt.title("画板1:画布2")

结果显示:
matplotlib绘图与实战以及pyecharts的简单使用_第2张图片

加载文件并绘图

打开所需要的文件,并对其图形化显示

import csv
x=[]
y=[]
with open("matplotlib数据/csv/matplotlib-demo.csv","r") as csvfile:
    lines=csv.reader(csvfile,delimiter=",")
    for each in lines:
        #别忘了将str转换为int
        x.append(int(each[0]))
        y.append(int(each[1]))
#编写图例
plt.plot(x,y,label="csv数据")
plt.title("从文件中加载数据并显示")
#显示图例
plt.legend()
plt.ylim(0,9)#设置y轴的范围
plt.xlim(0,9)
plt.show()

结果显示:
matplotlib绘图与实战以及pyecharts的简单使用_第3张图片

从网络api加载数据并绘图

import urllib
import json


url='https://api.douban.com/v2/book/1220562'
json_object=urllib.request.urlopen(url).read().decode()

data=json.loads(json_object)

tags=data["tags"]
print(tags)

x=[]
y=[]
for each in tags:
    x.append(each["name"])
    y.append(each["count"])
plt.bar(x,y,label="图书搜索热词")
plt.legend()
plt.xlabel("搜索的词条")
plt.ylabel("搜索排名")
plt.show()

使用numpy简化代码

以上代码可以简化成以下形式

x,y=np.loadtxt("matplotlib数据/csv/matplotlib-demo.csv",delimiter=",",unpack=True)
#编写图例
plt.plot(x,y,label="csv数据")
plt.title("从文件中加载数据并显示")
#显示图例
plt.legend()
plt.ylim(0,9)#设置y轴的范围
plt.xlim(0,9)
plt.show()

s=Series(np.random.randn(10),index=np.arange(1,11)*10)
print(s)
#Series自带plot的方法
s.plot()
plt.show()

pandas+matplotlib简化数据可视化

首先导入需要的模块

import numpy as np
import matplotlib.pyplot as plt
# 用  处理中文,正常显示
plt.rcParams['font.sans-serif']=['SimHei']
#处理 负号,正常显示
plt.rcParams['axes.unicode_minus']=False
import pandas as pd
from pandas import Series,DataFrame

Series绘制图形

s=Series(np.random.randn(10),index=np.arange(10)*10)
s.plot()
plt.show()

datafram进行绘图

df=DataFrame(np.random.randn(10,5),columns=list("ABCDE"),index=np.arange(10)*10)
#还是使用Series的方法显示一下
for each in df:
    df[each].plot()
plt.show()

结果显示:
matplotlib绘图与实战以及pyecharts的简单使用_第4张图片

其他图形

在一张画布上显示两张不同的图案,使用相同的数据

fig,axes=plt.subplots(2,1)

s1=Series(np.random.randn(8),index=list("ABCDEFGH"))

s1.plot(kind='bar',ax=axes[0],alpha=0.8)
s1.plot(kind='barh',ax=axes[1],alpha=0.8)
#将横坐标的文字旋转45度
plt.xticks(rotation=45)

结果显示:
matplotlib绘图与实战以及pyecharts的简单使用_第5张图片

在pandas中绘制一个直方图

df2=pd.read_excel("matplotlib数据/excel/pandas-matplotlib.xlsx","Sheet1")
#准备一个画布
fig=plt.figure()
ax=fig.add_subplot(111)
ax.hist(df2["Age"],bins=10)
plt.xlabel("年龄")
plt.ylabel("员工")
plt.title("年龄分布")
plt.show()

结果显示:
matplotlib绘图与实战以及pyecharts的简单使用_第6张图片

箱线图

df2=pd.read_excel("matplotlib数据/excel/pandas-matplotlib.xlsx","Sheet1")
#准备一个画布
fig=plt.figure()
ax=fig.add_subplot(111)
ax.boxplot(df2["Age"])
plt.xlabel("年龄")
plt.ylabel("员工")
plt.title("年龄分布")
plt.show()

结果显示:
matplotlib绘图与实战以及pyecharts的简单使用_第7张图片

条形图

df2=pd.read_excel("matplotlib数据/excel/pandas-matplotlib.xlsx","Sheet1")
mysum=df2.groupby("Gender").Sales.sum()
plt.figure()
mysum.plot(kind="bar")
plt.show()

结果显示:
matplotlib绘图与实战以及pyecharts的简单使用_第8张图片

折线图

mysum=df2.groupby("BMI").Sales.sum()
plt.figure()
mysum.plot(kind="line")
plt.show()

将两个图形绘制到一起

将一块画布分割开,然后画上不同的图形,分别选择画布即可

#把他们画到一起
mysum=df2.groupby("Gender").Sales.sum()
fig=plt.figure()
ax1=fig.add_subplot(121)
mysum.plot(kind="bar")

ax2=fig.add_subplot(122)
mysum=df2.groupby("BMI").Sales.sum()
mysum.plot(kind="line")
plt.show()

结果显示:
matplotlib绘图与实战以及pyecharts的简单使用_第9张图片

柱状堆积图

mysum=df2.groupby(["BMI","Gender"]).Sales.sum()
mysum.unstack().plot(kind="bar",stacked=True,color=['pink','blue'])
plt.show()

结果显示:
matplotlib绘图与实战以及pyecharts的简单使用_第10张图片

散点图

散点图需要使用两个数字作为坐标轴,所以不能选择其他文本类型

plt.scatter(df2["Age"],df2["Sales"])
plt.show()
#或者如下图所示,效果相同
"""

fig=plt.figure()
ax=fig.add_subplot(111)
ax.scatter(df2["Age"],df2["Sales"])
plt.show()
"""

气泡图

气泡图需要有三个参数,分别作为横纵坐标以及气泡的大小

fig=plt.figure()
ax=fig.add_subplot(111)
ax.scatter(df2["Age"],df2["Sales"],s=df2["Income"])#第三个参数表示点的大小
plt.show()

结果显示:
matplotlib绘图与实战以及pyecharts的简单使用_第11张图片

饼图

#按照性别进行分组
mysum=df2.groupby("Gender").Sales.sum()
#autopct显示小数的位数
plt.pie(mysum,labels=mysum.index,autopct='%.1f%%')
plt.show()

结果显示:
matplotlib绘图与实战以及pyecharts的简单使用_第12张图片

pyecharts

导入需要使用的模块
from pyecharts import Bar
没有该模块需要使用windows+r进行安装
安装语句为
pip install pyecharts
##新建一个柱状图图表

bar=Bar("我的第一个图表","副标题")
bar.add("服装",["衬衫","羊毛衫","雪纺衫","裤子","袜子","高跟鞋"],[5,20,36,10,75,120])
bar.render("html/01.柱状图.html")

结果显示:
matplotlib绘图与实战以及pyecharts的简单使用_第13张图片

显示柱状图的工具栏

bar=Bar("我的第一个图表","副标题")
bar.add("服装",["衬衫","羊毛衫","雪纺衫","裤子","袜子","高跟鞋"],
        [5,20,36,10,75,120],
        is_more_utils=True     
)
bar.show_config()
bar.render("html/02.柱状图-有工具栏.html")

结果显示:
matplotlib绘图与实战以及pyecharts的简单使用_第14张图片

柱形图-堆积

bar=Bar("两个商家数据的堆叠展示")
bar.add("商家A",["衬衫","羊毛衫","雪纺衫","裤子","袜子","高跟鞋"],
        [5,20,36,10,75,120],
        is_stack=True     
)
bar.add("商家B",["衬衫","羊毛衫","雪纺衫","裤子","袜子","高跟鞋"],
        [10,40,34,56,75,160],
        is_stack=True     
)
# 显示工具栏
bar.show_config()
bar.render("html/03.柱状图-堆积.html")

结果显示:
matplotlib绘图与实战以及pyecharts的简单使用_第15张图片

给柱状图标记一些值

bar=Bar("两个商家数据的堆叠展示")
bar.add("商家A",["衬衫","羊毛衫","雪纺衫","裤子","袜子","高跟鞋"],
        [5,20,36,10,75,120],
        mark_point=["average"]#标记最接近平均值的数字
)
bar.add("商家B",["衬衫","羊毛衫","雪纺衫","裤子","袜子","高跟鞋"],
        [10,40,34,56,75,160],
        
        mark_line=["max","min"]
)

bar.render("html/04.柱状图-堆积-标记.html")

结果显示:
matplotlib绘图与实战以及pyecharts的简单使用_第16张图片

x-y的转换

bar=Bar("x-y轴的转换")
bar.add("商家A",["衬衫","羊毛衫","雪纺衫","裤子","袜子","高跟鞋"],
        [5,20,36,10,75,120],
        
)
bar.add("商家B",["衬衫","羊毛衫","雪纺衫","裤子","袜子","高跟鞋"],
        [10,40,34,56,75,160],
        
       is_convert=True
)

bar.render("html/05.柱状图-转换x-y轴.html")

结果显示:
matplotlib绘图与实战以及pyecharts的简单使用_第17张图片

绘制折线图

from pyecharts import Line
x_axis=["衬衫","羊毛衫","雪纺衫","裤子","袜子","高跟鞋"]
va=[5,20,36,10,75,120]
vb=[10,40,34,56,75,160]
line=Line("折线图示例")
line.add("商家A",x_axis,va,mark_point=["average"])
line.add("商家B",x_axis,vb,is_smooth=True,mark_line=["max","min"])
line.render("html/06.折线图.html")

结果显示:
matplotlib绘图与实战以及pyecharts的简单使用_第18张图片

折线图更改显示效果

line=Line("折线图示例")
line.add("商家A",x_axis,va,mark_point=["average"],mark_point_symbol="diamond",mark_point_textcolor="#ff0000")
line.add("商家B",x_axis,vb,is_smooth=True,mark_point=["max","min"],mark_point_symbol="arrow",mark_point_textcolor="b")
line.render("html/07.折线图-更改标记点显示.html")

结果显示:

matplotlib绘图与实战以及pyecharts的简单使用_第19张图片

面积图展示

line=Line("面积图示例")
#area_opacity透明度
line.add("商家A",x_axis,va,is_fill=True,area_opacity=0.5)
line.add("商家B",x_axis,vb,is_fill=True,area_color="#00000",area_opacity=0.2,is_smooth=True)
line.render("html/08.面积图-更改标记点显示.html")

结果显示:
matplotlib绘图与实战以及pyecharts的简单使用_第20张图片

绘制饼图

from pyecharts import Pie
attr=["衬衫","羊毛衫","雪纺衫","裤子","袜子","高跟鞋"]
va=[5,20,36,10,75,120]
vb=[10,40,34,56,75,160]
pie=Pie("饼图示例")
pie.add("商品",attr,va,is_label=True)
pie.render("html/09.饼图.html")

结果显示:
matplotlib绘图与实战以及pyecharts的简单使用_第21张图片

更改饼的形状-环形显示

就是改变饼的内心半径

pie=Pie("饼图环形显示示例")
pie.add("商品",attr,va,
        #半径:内半径和外半径
       radius=[50,75],
       label_text_color=None,
       is_label_show=True,
       #图例显示的位置
       legend_pos="right",
       legend_orient='vertical' 
       )
pie.render("html/10.饼图.html")

结果显示:
matplotlib绘图与实战以及pyecharts的简单使用_第22张图片

散点图

from pyecharts import Scatter
attr=["衬衫","羊毛衫","雪纺衫","裤子","袜子","高跟鞋"]
va=[5,20,36,10,75,120]
vb=[10,40,34,56,75,160]
import numpy as np
scatter=Scatter("散点图示例")
#散点需要纯数字
scatter.add("商家A",np.arange(1,7)*10,va)
scatter.add("商家B",np.arange(1,7)*10,vb)
scatter.render("html/11.散点图.html")

散点图优化显示

加入了动态散点大小的变化

scatter=Scatter("散点图示例")
#散点需要纯数字
scatter.add("商家A",np.arange(1,7)*10,va)
scatter.add("商家B",np.arange(1,7)*10,vb,
            is_visualmap=True,
            visual_type="size",
            visual_range_size=[0,100]
           )
scatter.render("html/12.散点图优化显示.html")

结果显示:
matplotlib绘图与实战以及pyecharts的简单使用_第23张图片

词云显示

import csv
attr=[]
value=[]
with open("word.csv","r",encoding="utf-8") as csvfile:
    lines=csv.reader(csvfile)
    for each in lines:
        attr.append(each[0])
        value.append(each[1])
from pyecharts import WordCloud
wordcloud=WordCloud(width=1000,height=600)
wordcloud.add("",attr,value,word_size_range=[20,100],shape="cardioid")
wordcloud.render("html/13.词云.html")

结果显示:
matplotlib绘图与实战以及pyecharts的简单使用_第24张图片

多效果显示

将柱状图和折线图效果叠加显示

#同时bar与line
attr=["衬衫","羊毛衫","雪纺衫","裤子","袜子","高跟鞋"]
va=[5,20,36,10,75,120]
vb=[10,40,34,56,75,160]
bar=Bar("Bar+ Line 实例")
bar.add("bar",attr,va)

line=Line()
line.add("line",attr,vb)
from pyecharts import Overlap
overlap=Overlap()
overlap.add(bar)
overlap.add(line)
overlap.render("html/14.bar+line同时显示.html")

matplotlib绘图与实战以及pyecharts的简单使用_第25张图片

增加一个动态效果

from pyecharts import EffectScatter
attr=["衬衫","羊毛衫","雪纺衫","裤子","袜子","高跟鞋"]
va=[5,20,36,10,75,120]
vb=[10,40,34,56,75,160]

line=Line("line+es 示例")
line.add("",attr,va,is_random=True)
es=EffectScatter()
es.add("",attr,va,effect_scale=8)

overlap=Overlap()
overlap.add(line)
overlap.add(es)
overlap.render("html/15.lin+es显示.html")

结果显示:
matplotlib绘图与实战以及pyecharts的简单使用_第26张图片

你可能感兴趣的:(matplotlib绘图与实战以及pyecharts的简单使用)