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-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()
在同一块画布上创建两个图形
#新建一张画布
#设置画布大小,以及像素
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")
打开所需要的文件,并对其图形化显示
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()
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()
以上代码可以简化成以下形式
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()
首先导入需要的模块
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
s=Series(np.random.randn(10),index=np.arange(10)*10)
s.plot()
plt.show()
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()
在一张画布上显示两张不同的图案,使用相同的数据
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)
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()
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()
df2=pd.read_excel("matplotlib数据/excel/pandas-matplotlib.xlsx","Sheet1")
mysum=df2.groupby("Gender").Sales.sum()
plt.figure()
mysum.plot(kind="bar")
plt.show()
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()
mysum=df2.groupby(["BMI","Gender"]).Sales.sum()
mysum.unstack().plot(kind="bar",stacked=True,color=['pink','blue'])
plt.show()
散点图需要使用两个数字作为坐标轴,所以不能选择其他文本类型
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()
#按照性别进行分组
mysum=df2.groupby("Gender").Sales.sum()
#autopct显示小数的位数
plt.pie(mysum,labels=mysum.index,autopct='%.1f%%')
plt.show()
导入需要使用的模块
from pyecharts import Bar
没有该模块需要使用windows+r进行安装
安装语句为
pip install pyecharts
##新建一个柱状图图表
bar=Bar("我的第一个图表","副标题")
bar.add("服装",["衬衫","羊毛衫","雪纺衫","裤子","袜子","高跟鞋"],[5,20,36,10,75,120])
bar.render("html/01.柱状图.html")
bar=Bar("我的第一个图表","副标题")
bar.add("服装",["衬衫","羊毛衫","雪纺衫","裤子","袜子","高跟鞋"],
[5,20,36,10,75,120],
is_more_utils=True
)
bar.show_config()
bar.render("html/02.柱状图-有工具栏.html")
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")
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")
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")
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")
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")
结果显示:
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")
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")
就是改变饼的内心半径
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")
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")
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")
将柱状图和折线图效果叠加显示
#同时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")
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")