#导入matplotlib相关库
import matplotlib.pyplot as plt
# 中文乱码的处理
plt.rcParams['font.sans-serif'] =['Microsoft YaHei']
plt.rcParams['axes.unicode_minus'] = False
#绘制条形图
plt.bar([0,1,2,3],[12406.8,13908.57,9386.87,9143.64],color = 'steelblue', alpha = 0.8)
#添加标题
plt.title("直辖市GDP水平")
#添加y轴标签
plt.ylabel("GDP")
#添加x轴标签
plt.xlabel("直辖市")
#添加刻度标签
plt.xticks(range(4),labels=["北京市","上海市","天津市","重庆市"])
# 设置Y轴的刻度范围
plt.ylim([5000,15000])
# 为每个条形图添加数值标签
for x,y in enumerate([12406.8,13908.57,9386.87,9143.64]):
plt.text(x,y+100,s=y,ha='center')
plt.show()
seasons = ['Spring', 'Summer', 'Fall', 'Winter']
list(enumerate(seasons))
[(0, 'Spring'), (1, 'Summer'), (2, 'Fall'), (3, 'Winter')]
# 下标从 1 开始
list(enumerate(seasons, start=1))
[(1, 'Spring'), (2, 'Summer'), (3, 'Fall'), (4, 'Winter')]
i = 0
seq = ['one', 'two', 'three']
for element in seq:
print(i,seq[i])
i+=1
0 one
1 two
2 three
seq = ['one', 'two', 'three']
for i,element in enumerate(seq):
print(i,element)
0 one
1 two
2 three
#导入matplotlib相关库
import matplotlib.pyplot as plt
# 中文乱码的处理
plt.rcParams['font.sans-serif'] =['Microsoft YaHei']
plt.rcParams['axes.unicode_minus'] = False
#将上面的垂直条形图做成水平条形图,使用plt.barh
plt.barh(range(4),[12406.8,13908.57,9386.87,9143.64])
#添加标题
plt.title("直辖市GDP水平")
#添加y轴标签
plt.ylabel("直辖市")
#添加x轴标签
plt.xlabel("GDP")
#添加刻度标签
plt.yticks(range(4),labels=["北京市","上海市","天津市","重庆市"])
# 设置Y轴的刻度范围
plt.xlim([5000,16000])
# 为每个条形图添加数值标签
for x,y in enumerate([12406.8,13908.57,9386.87,9143.64]):
plt.text(y,x,s=y,va='center')
plt.show()
#添加标题
plt.title("《python数据分析实战》在不同平台最低价")
#添加x轴标签
plt.xlabel("单价/元")
#添加y轴标签
plt.ylabel("不同平台")
#添加刻度标签
plt.yticks(range(5),labels=["亚马逊","当当网","中国图书网","京东","天猫"])
#为每个条形图添加数值标签
for x,y in enumerate([39.5,39.9,45.5,38.9,33.34]):
plt.text(y,x,s = y,va = "center")
plt.show()
# 构建数据
Y2016 = [15600,12700,11300,4270,3620]
Y2017 = [17400,14800,12000,5200,4020]
labels = ['北京','上海','香港','深圳','广州']
bar_width = 0.35
#绘制图形
#plt.bar([1,2,3,4,5],Y2016,label = '2016',color = "steelblue",alpha = 0.8,width = bar_width)
#plt.bar([1.35,2.35,3.35,4.35,5.35],Y2017,label = '2017',color = "indianred",alpha = 0.8,width = bar_width)
import numpy as np
plt.bar(np.arange(5),Y2016,label = '2016',color = "steelblue",alpha = 0.8,width = bar_width)
plt.bar(np.arange(5)+bar_width,Y2017,label = '2017',color = "indianred",alpha = 0.8,width = bar_width)
#添加标题
plt.title("胡润财富榜:亿万资产超高净值家庭数")
#添加x轴标签
plt.xlabel("地区")
#添加y轴标签
plt.ylabel("家庭数")
#添加x轴刻度标签
plt.xticks(np.arange(5)+0.15,labels=labels)
#为每个条形图添加数值标签
for x,y in enumerate(Y2016):
plt.text(x,y+120,s = y,ha = "center")
for x,y in enumerate(Y2017):
plt.text(x+0.35,y+120,s = y,ha = "center")
#添加图例
plt.legend()
plt.show()
import matplotlib.pyplot as plt
plt.rcParams["font.sans-serif"] = ["Microsoft YaHei"]
plt.rcParams["axes.unicode_minus"] = False
plt.bar(x轴数值,y轴数值,color = "颜色",alpha = 透明度,width = 宽度)
plt.barh(y轴数值,x轴数值,color = "颜色",alpha = 透明度,width = 宽度)
plt.title("")
plt.xlabel("")
plt.ylabel("")
plt.xticks(位置,labels=[])
plt.yticks(位置,labels=[])
plt.xlim([])
plt.ylim([])
for x,y in enumerate():
plt.text(x,y,s = 值,ha/va = "center")
plt.legend()
plt.show()
plt.pie(x
,explode=None
,labels=None
,colors=None
,autopct=None
,pctdistance=0.6
,shadow=False
,labeldistance=1.1
,startangle=None
,radius=None
,counterclock=True
,wedgeprops=None
,textprops=None
,center=(0, 0)
,frame=False)
#x:指定绘图的数据;
#explode:指定饼图某些部分的突出显示,即呈现爆炸式;
#labels:为饼图添加标签说明,类似于图例说明;
#colors:指定饼图的填充色;
#autopct:自动添加百分比显示,可以采用格式化的方法显示;
#pctdistance:设置百分比标签与圆心的距离;
#shadow:是否添加饼图的阴影效果;
#labeldistance:设置各扇形标签(图例)与圆心的距离;
#startangle:设置饼图的初始摆放角度;
#radius:设置饼图的半径大小;
#counterclock:是否让饼图按逆时针顺序呈现;
#wedgeprops:设置饼图内外边界的属性,如边界线的粗细、颜色等;
#textprops:设置饼图中文本的属性,如字体大小、颜色等;
#center:指定饼图的中心点位置,默认为原点
#frame:是否要显示饼图背后的图框,如果设置为True的话,需要同时控制图框x轴、y轴的范围和饼图的中心位置;
#导入对应的库
import matplotlib.pyplot as plt
#解决中文乱码的问题
plt.rcParams["font.sans-serif"] = ["Microsoft YaHei"]
#绘制图形
plt.pie([25.15,37.24,33.36,3.68,0.57]
,explode=[0.1,0,0,0,0]
,labels = ["中专","大专","本科","硕士","其他"]
,colors = ['#9999ff','#ff9999','#7777aa','#2442aa','#dd5555'] # 自定义颜色
,autopct='%.1f%%' # 设置百分比的格式,这里保留一位小数
,pctdistance=0.8 # 设置百分比标签与圆心的距离
,labeldistance = 1.15 # 设置教育水平标签与圆心的距离
,startangle = 360 # 设置饼图的初始角度
,radius = 1 # 设置饼图的半径
,counterclock = False # 是否逆时针,这里设置为顺时针方向
,wedgeprops = {'linewidth': 0.5, 'edgecolor':'green'}# 设置饼图内外边界的属性值
,textprops = {'fontsize':12, 'color':'k'} # 设置文本标签的属性值
,center = (0.5,0.5) # 设置饼图的原点
,frame = False # 是否显示饼图的图框,这里设置不显示
)
#添加标题
plt.title("芝麻信用失信用户学历占比")
#显示图形
plt.show()
plt.boxplot(
x
,notch=None
,sym=None
,vert=None
,whis=None
,positions=None
,widths=None
,patch_artist=None
,meanline=None
,showmeans=None
,showcaps=None
,showbox=None
,showfliers=None
,boxprops=None
,labels=None
,flierprops=None
,medianprops=None
,meanprops=None
,capprops=None
,whiskerprops=None)
#x:指定要绘制箱线图的数据;
#notch:是否是凹口的形式展现箱线图,默认非凹口;
#sym:指定异常点的形状,默认为+号显示;
#vert:是否需要将箱线图垂直摆放,默认垂直摆放;
#whis:指定上下须与上下四分位的距离,默认为1.5倍的四分位差;
#positions:指定箱线图的位置,默认为[0,1,2…];
#widths:指定箱线图的宽度,默认为0.5;
#patch_artist:是否填充箱体的颜色;
#meanline:是否用线的形式表示均值,默认用点来表示;
#showmeans:是否显示均值,默认不显示;
#showcaps:是否显示箱线图顶端和末端的两条线,默认显示;
#showbox:是否显示箱线图的箱体,默认显示;
#showfliers:是否显示异常值,默认显示;
#boxprops:设置箱体的属性,如边框色,填充色等;
#labels:为箱线图添加标签,类似于图例的作用;
#filerprops:设置异常值的属性,如异常点的形状、大小、填充色等;
#medianprops:设置中位数的属性,如线的类型、粗细等;
#meanprops:设置均值的属性,如点的大小、颜色等;
#capprops:设置箱线图顶端和末端线条的属性,如颜色、粗细等;
#whiskerprops:设置须的属性,如颜色、粗细、线的类型等;
数据部分详情见这十套练习,教你如何用Pandas做数据分析
这篇内容的练习7-可视化
#导入必要的库
import pandas as pd
#从以下地址导入数据
#将数据框命名为titanic
titanic = pd.read_csv(r"D:\PythonFlie\python\pandas\pandas_exercise\exercise_data\train.csv")
titanic.head()
PassengerId Survived Pclass Name Sex Age SibSp Parch Ticket Fare Cabin Embarked
0 1 0 3 Braund, Mr. Owen Harris male 22.0 1 0 A/5 21171 7.2500 NaN S
1 2 1 1 Cumings, Mrs. John Bradley (Florence Briggs Th... female 38.0 1 0 PC 17599 71.2833 C85 C
2 3 1 3 Heikkinen, Miss. Laina female 26.0 0 0 STON/O2. 3101282 7.9250 NaN S
3 4 1 1 Futrelle, Mrs. Jacques Heath (Lily May Peel) female 35.0 1 0 113803 53.1000 C123 S
4 5 0 3 Allen, Mr. William Henry male 35.0 0 0 373450 8.0500 NaN S
# 检查年龄是否有缺失
titanic.info()
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 891 entries, 0 to 890
Data columns (total 12 columns):
# Column Non-Null Count Dtype
--- ------ -------------- -----
0 PassengerId 891 non-null int64
1 Survived 891 non-null int64
2 Pclass 891 non-null int64
3 Name 891 non-null object
4 Sex 891 non-null object
5 Age 714 non-null float64
6 SibSp 891 non-null int64
7 Parch 891 non-null int64
8 Ticket 891 non-null object
9 Fare 891 non-null float64
10 Cabin 204 non-null object
11 Embarked 889 non-null object
dtypes: float64(2), int64(5), object(5)
memory usage: 83.7+ KB
# 不妨删除含有缺失年龄的观察
titanic.dropna(subset=['Age'], inplace=True)
#在检查一下数据
titanic.info()
<class 'pandas.core.frame.DataFrame'>
Int64Index: 714 entries, 0 to 890
Data columns (total 12 columns):
# Column Non-Null Count Dtype
--- ------ -------------- -----
0 PassengerId 714 non-null int64
1 Survived 714 non-null int64
2 Pclass 714 non-null int64
3 Name 714 non-null object
4 Sex 714 non-null object
5 Age 714 non-null float64
6 SibSp 714 non-null int64
7 Parch 714 non-null int64
8 Ticket 714 non-null object
9 Fare 714 non-null float64
10 Cabin 185 non-null object
11 Embarked 712 non-null object
dtypes: float64(2), int64(5), object(5)
memory usage: 72.5+ KB
#导入matplotlib库
import matplotlib.pyplot as plt
#解决中文乱码的问题
plt.rcParams["font.sans-serif"] = ["Microsoft YaHei"]
#绘制图形(注意这里需要删除缺失值后进行绘图,否则将没有图形显示)
plt.boxplot(titanic["Age"]
,notch=False
,sym="."
,vert=True
,patch_artist=False
,meanline=True
,showmeans=True
,showcaps=True
,showbox=True
,showfliers=True
,boxprops={'color':'black'}
,flierprops = {'marker':'o','markerfacecolor':'red','color':'black'} # 设置异常值属性,点的形状、填充色和边框色
,meanprops = {'marker':'D','markerfacecolor':'indianred'} # 设置均值点的属性,点的形状、填充色
,medianprops = {'linestyle':'--','color':'orange'} # 设置中位数线的属性,线的类型和颜色
)
# 设置y轴的范围
plt.ylim(0,85)
#显示图形
plt.show()
# 按舱级排序,为了后面正常显示分组盒形图的顺序
titanic.sort_values(by = 'Pclass', inplace=True)
# 通过for循环将不同仓位的年龄人群分别存储到列表Age变量中
Age = []
Levels = titanic.Pclass.unique()
for Pclass in Levels:
Age.append(titanic.loc[titanic.Pclass==Pclass,'Age'])
#绘制图形
plt.boxplot(Age
,notch=False
,sym="."
,vert=True
,positions=[1,2,3]
,patch_artist=True
,labels = ['一等舱','二等舱','三等舱'] # 添加具体的标签名称
,meanline=True
,showmeans=True
,showcaps=True
,showbox=True
,showfliers=True
,boxprops={'color':'black'}
,flierprops = {'marker':'o','markerfacecolor':'red','color':'black'} # 设置异常值属性,点的形状、填充色和边框色
,meanprops = {'marker':'D','markerfacecolor':'indianred'} # 设置均值点的属性,点的形状、填充色
,medianprops = {'linestyle':'--','color':'orange'} # 设置中位数线的属性,线的类型和颜色
)
plt.show()
plt.hist(x
,bins=10
,range=None
,normed=False
,weights=None
,cumulative=False
,bottom=None
,histtype='bar'
,align='mid'
,orientation='vertical'
,rwidth=None
,log=False
,color=None
,label=None
,stacked=False)
#x:指定要绘制直方图的数据;
#bins:指定直方图条形的个数;
#range:指定直方图数据的上下界,默认包含绘图数据的最大值和最小值;
#normed:是否将直方图的频数转换成频率;
#weights:该参数可为每一个数据点设置权重;
#cumulative:是否需要计算累计频数或频率;
#bottom:可以为直方图的每个条形添加基准线,默认为0;
#histtype:指定直方图的类型,默认为bar,除此还有’barstacked’, ‘step’, ‘stepfilled’;
#align:设置条形边界值的对其方式,默认为mid,除此还有’left’和’right’;
#orientation:设置直方图的摆放方向,默认为垂直方向;
#rwidth:设置直方图条形宽度的百分比;
#log:是否需要对绘图数据进行log变换;
#color:设置直方图的填充色;
#label:设置直方图的标签,可通过legend展示其图例;
#stacked:当有多个数据时,是否需要将直方图呈堆叠摆放,默认水平摆放;
#从以下地址导入数据
#将数据框命名为titanic
titanic = pd.read_csv(r"D:\PythonFlie\python\pandas\pandas_exercise\exercise_data\train.csv")
titanic.head()
PassengerId Survived Pclass Name Sex Age SibSp Parch Ticket Fare Cabin Embarked
0 1 0 3 Braund, Mr. Owen Harris male 22.0 1 0 A/5 21171 7.2500 NaN S
1 2 1 1 Cumings, Mrs. John Bradley (Florence Briggs Th... female 38.0 1 0 PC 17599 71.2833 C85 C
2 3 1 3 Heikkinen, Miss. Laina female 26.0 0 0 STON/O2. 3101282 7.9250 NaN S
3 4 1 1 Futrelle, Mrs. Jacques Heath (Lily May Peel) female 35.0 1 0 113803 53.1000 C123 S
4 5 0 3 Allen, Mr. William Henry male 35.0 0 0 373450 8.0500 NaN S
# 检查年龄是否有缺失
titanic.info()
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 891 entries, 0 to 890
Data columns (total 12 columns):
# Column Non-Null Count Dtype
--- ------ -------------- -----
0 PassengerId 891 non-null int64
1 Survived 891 non-null int64
2 Pclass 891 non-null int64
3 Name 891 non-null object
4 Sex 891 non-null object
5 Age 714 non-null float64
6 SibSp 891 non-null int64
7 Parch 891 non-null int64
8 Ticket 891 non-null object
9 Fare 891 non-null float64
10 Cabin 204 non-null object
11 Embarked 889 non-null object
dtypes: float64(2), int64(5), object(5)
memory usage: 83.7+ KB
titanic.dropna(subset = ["Age"],inplace = True)
#导入matplotlib库
import matplotlib.pyplot as plt
#绘制图形
plt.hist(titanic.Age
,bins=20
,histtype ="barstacked"
,align ='mid'
,label = '年龄的频数直方图'
,color = 'steelblue'
,edgecolor = 'k'
)
#显示图例
plt.legend()
#显示图形
plt.show()
import numpy as np
#绘制图形
plt.hist(titanic.Age
,bins=np.arange(titanic.Age.min(),titanic.Age.max(),5)
,density=True
,cumulative=True
,align ='mid'
,label = '年龄的频率直方图'
,color = 'steelblue'
,edgecolor = 'k'
)
#设置x轴范围
plt.xlim([0,80])
# 设置坐标轴标签和标题
plt.title('乘客年龄直方图')
plt.xlabel('年龄')
plt.ylabel('频率')
#显示图例
plt.legend()
#显示图形
plt.show()
#导入matplotlib库
import matplotlib.pyplot as plt
#绘制图形
plt.hist(titanic.Age[titanic.Sex == 'male']
,bins=np.arange(titanic.Age.min(), titanic.Age.max(), 2)
,label = "男性"
,histtype ="barstacked"
,align ='mid'
,color = 'steelblue'
,edgecolor = 'k'
,alpha = 0.7
)
plt.hist(titanic.Age[titanic.Sex == 'female']
,bins=np.arange(titanic.Age.min(), titanic.Age.max(), 2)
,label = "女性"
,histtype ="barstacked"
,align ='mid'
,edgecolor = 'k'
,alpha = 0.6
)
# 设置坐标轴标签和标题
plt.title('乘客年龄直方图')
plt.xlabel('年龄')
plt.ylabel('人数')
#显示图例
plt.legend()
#显示图形
plt.show()
plt.plot(x
,y
,linestyle
,linewidth
,color
,marker
,markersize
,markeredgecolor
,markerfactcolor
,label
,alpha)
#x:指定折线图的x轴数据;
#y:指定折线图的y轴数据;
#linestyle:指定折线的类型,可以是实线、虚线、点虚线、点点线等,默认文实线;
#linewidth:指定折线的宽度
#marker:可以为折线图添加点,该参数是设置点的形状;
#markersize:设置点的大小;
#markeredgecolor:设置点的边框色;
#markerfactcolor:设置点的填充色;
#label:为折线图添加标签,类似于图例的作用;
#导入数据
import pandas as pd
wechart = pd.read_csv(r"D:\PythonFlie\python\pandas\pandas_exercise\exercise_data\wechart.csv")
wechart.head(-5)
date article_reading_cnts article_reading_times collect_times
0 2017/1/1 37 124 1
1 2017/1/2 51 149 7
2 2017/1/3 93 369 5
3 2017/1/4 58 278 6
4 2017/1/5 58 216 2
... ... ... ... ...
261 2017/9/19 95 231 8
262 2017/9/20 83 230 19
263 2017/9/21 78 364 3
264 2017/9/22 69 248 9
265 2017/9/23 539 799 29
266 rows × 4 columns
#查看数据情况
wechart.info()
#不存在缺失值
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 271 entries, 0 to 270
Data columns (total 4 columns):
# Column Non-Null Count Dtype
--- ------ -------------- -----
0 date 271 non-null object
1 article_reading_cnts 271 non-null int64
2 article_reading_times 271 non-null int64
3 collect_times 271 non-null int64
dtypes: int64(3), object(1)
memory usage: 8.6+ KB
#绘制公众号文章阅读人数随时间折线图
#导入对应的库
import matplotlib.pyplot as plt
#解决中文乱码问题
plt.rcParams["font.sans-serif"] = ['Microsoft YaHei']
# 设置图框的大小
fig = plt.figure(figsize=(20,6))
#绘图
plt.plot(wechart.date[wechart.date >= '2017/9/1']
,wechart.article_reading_cnts[wechart.date >= '2017/9/1']
,linestyle = '-' # 折线类型
,linewidth = 2 # 折线宽度
,color = 'steelblue' # 折线颜色
,marker = 'o' # 点的形状
,markersize = 6 # 点的大小
,markeredgecolor='black' # 点的边框色
,markerfacecolor='brown' # 点的填充色
)
#设置标题
plt.title("公众号文章九月份阅读人数折线图")
#设置x轴,y轴标题
plt.xlabel("日期/天")
plt.ylabel("人数")
# 为了避免x轴日期刻度标签的重叠,设置x轴刻度自动展现,并且45度倾斜
fig.autofmt_xdate(rotation = 45)
#显示图形
plt.show()
from datetime import datetime
#首先把需要的数据弄一下
wechart["月份"] = wechart["date"].apply(lambda a:datetime.strptime(a, '%Y/%m/%d').strftime('%Y-%m'))
wechart.head()
date article_reading_cnts article_reading_times collect_times 月份
0 2017/1/1 37 124 1 2017-01
1 2017/1/2 51 149 7 2017-01
2 2017/1/3 93 369 5 2017-01
3 2017/1/4 58 278 6 2017-01
4 2017/1/5 58 216 2 2017-01
#在将article_reading_cnts根据月份聚合一下
wechart.groupby(by = "月份").aggregate({"article_reading_cnts":sum})
article_reading_cnts
月份
2017-01 2461
2017-02 4397
2017-03 3400
2017-04 4687
2017-05 1688
2017-06 3777
2017-07 4133
2017-08 4132
2017-09 7444
#导入对应的库
import matplotlib.pyplot as plt
#解决中文乱码问题
plt.rcParams["font.sans-serif"] = ['Microsoft YaHei']
# 设置图框的大小
fig = plt.figure(figsize=(10,6))
#绘图
plt.plot(wechart.groupby(by = "月份").aggregate({"article_reading_cnts":sum}).index
,wechart.groupby(by = "月份").aggregate({"article_reading_cnts":sum})
,linestyle = '-' # 折线类型
,linewidth = 2 # 折线宽度
,color = 'steelblue' # 折线颜色
,marker = 'o' # 点的形状
,markersize = 6 # 点的大小
,markeredgecolor='black' # 点的边框色
,markerfacecolor='brown' # 点的填充色
)
#设置标题
plt.title("公众号文章九月份阅读人数折线图")
#设置x轴,y轴标题
plt.xlabel("日期/天")
plt.ylabel("人数")
# 为了避免x轴日期刻度标签的重叠,设置x轴刻度自动展现,并且45度倾斜
fig.autofmt_xdate(rotation = 45)
#显示图形
plt.show()
#导入时间模块
from datetime import datetime
a = '2017/8/2'
b = datetime.strptime(a, '%Y/%m/%d').strftime('%m-%d')
b
'08-02'
#绘制公众号文章阅读人数随时间折线图
#导入对应的库
import matplotlib.pyplot as plt
import matplotlib as mpl
#解决中文乱码问题
plt.rcParams["font.sans-serif"] = ['Microsoft YaHei']
# 设置图框的大小
fig = plt.figure(figsize=(20,6))
#绘图
plt.plot(wechart.date[wechart.date >= '2017/9/1']
,wechart.article_reading_cnts[wechart.date >= '2017/9/1']
,linestyle = '-' # 折线类型
,linewidth = 2 # 折线宽度
,color = 'steelblue' # 折线颜色
,marker = 'o' # 点的形状
,markersize = 6 # 点的大小
,markeredgecolor='black' # 点的边框色
,markerfacecolor='brown' # 点的填充色
)
#设置标题
plt.title("公众号文章九月份阅读人数折线图")
#设置x轴,y轴标题
plt.xlabel("日期/天")
plt.ylabel("人数")
# 获取图的坐标信息
ax = plt.gca()
# 设置日期的显示格式
date_format = mpl.dates.DateFormatter("%m-%d")
ax.xaxis.set_major_formatter(date_format)
# 设置x轴显示多少个日期刻度
#xlocator = mpl.ticker.LinearLocator(10)
# 设置x轴每个刻度的间隔天数
xlocator = mpl.ticker.MultipleLocator(2)
ax.xaxis.set_major_locator(xlocator)
# 为了避免x轴日期刻度标签的重叠,设置x轴刻度自动展现,并且45度倾斜
fig.autofmt_xdate(rotation = 45)
#显示图形
plt.show()
#绘制公众号文章阅读人数随时间折线图
#导入对应的库
import matplotlib.pyplot as plt
#解决中文乱码问题
plt.rcParams["font.sans-serif"] = ['Microsoft YaHei']
# 设置图框的大小
fig = plt.figure(figsize=(20,6))
#绘图
plt.plot(wechart.date[wechart.date >= '2017/9/1']
,wechart.article_reading_cnts[wechart.date >= '2017/9/1']
,linestyle = '-' # 折线类型
,linewidth = 2 # 折线宽度
,color = 'steelblue' # 折线颜色
,marker = 'o' # 点的形状
,markersize = 6 # 点的大小
,markeredgecolor='black' # 点的边框色
,markerfacecolor='brown' # 点的填充色
,label = "人数"
)
#绘图
plt.plot(wechart.date[wechart.date >= '2017/9/1']
,wechart.article_reading_times[wechart.date >= '2017/9/1']
,linestyle = '-' # 折线类型
,linewidth = 2 # 折线宽度
,color = '#ff9999' # 折线颜色
,marker = 'o' # 点的形状
,markersize = 6 # 点的大小
,markeredgecolor='black' # 点的边框色
,markerfacecolor='brown' # 点的填充色
,label = "次数"
)
#设置标题
plt.title("公众号每天阅读人数和次数趋势图")
#设置x轴,y轴标题
plt.xlabel("日期/天")
plt.ylabel("人数/次数")
#设置图例
plt.legend()
# 为了避免x轴日期刻度标签的重叠,设置x轴刻度自动展现,并且45度倾斜
fig.autofmt_xdate(rotation = 45)
#显示图形
plt.show()
#导入对应的库
import matplotlib.pyplot as plt
#解决中文乱码问题
plt.rcParams["font.sans-serif"] = ['Microsoft YaHei']
# 设置图框的大小
fig = plt.figure(figsize=(10,6))
#绘图
plt.plot(wechart.groupby(by = "月份").aggregate({"article_reading_cnts":sum}).index
,wechart.groupby(by = "月份").aggregate({"article_reading_cnts":sum})
,linestyle = '-' # 折线类型
,linewidth = 2 # 折线宽度
,color = 'steelblue' # 折线颜色
,marker = 'o' # 点的形状
,markersize = 6 # 点的大小
,markeredgecolor='black' # 点的边框色
,markerfacecolor='steelblue' # 点的填充色
,label = "人数"
)
plt.plot(wechart.groupby(by = "月份").aggregate({"article_reading_cnts":sum}).index
,wechart.groupby(by = "月份").aggregate({"article_reading_times":sum})
,linestyle = '-' # 折线类型
,linewidth = 2 # 折线宽度
,color = '#ff9999' # 折线颜色
,marker = 'o' # 点的形状
,markersize = 6 # 点的大小
,markeredgecolor='black' # 点的边框色
,markerfacecolor='#ff9999' # 点的填充色
,label = "次数"
)
#设置标题
plt.title("公众号文章九月份阅读人数折线图")
#设置x轴,y轴标题
plt.xlabel("日期/天")
plt.ylabel("人数")
#设置图例
plt.legend()
# 为了避免x轴日期刻度标签的重叠,设置x轴刻度自动展现,并且45度倾斜
fig.autofmt_xdate(rotation = 45)
#显示图形
plt.show()
plt.scatter(x
,y
,s=20
,c=None
,marker='o'
,cmap=None
,norm=None
,vmin=None
,vmax=None
,alpha=None
,linewidths=None
,edgecolors=None)
#x:指定散点图的x轴数据;
#y:指定散点图的y轴数据;
#s:指定散点图点的大小,默认为20,通过传入新的变量,实现气泡图的绘制;
#c:指定散点图点的颜色,默认为蓝色;
#marker:指定散点图点的形状,默认为圆形;
#cmap:指定色图,只有当c参数是一个浮点型的数组的时候才起作用;
#norm:设置数据亮度,标准化到0~1之间,使用该参数仍需要c为浮点型的数组;
#vmin、vmax:亮度设置,与norm类似,如果使用了norm则该参数无效;
#alpha:设置散点的透明度;
#linewidths:设置散点边界线的宽度;
#edgecolors:设置散点边界线的颜色;
import pandas as pd
cars = pd.read_csv(r"D:\PythonFlie\python\pandas\pandas_exercise\exercise_data\cars.csv")
cars.head()
speed dist
0 4 2
1 4 10
2 7 4
3 7 22
4 8 16
#查看数据是否存在缺失,没有缺失数据
cars.info()
#查看数据是否存在缺失,没有缺失数据
cars.info()
#查看数据是否存在缺失,没有缺失数据
cars.info()
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 50 entries, 0 to 49
Data columns (total 2 columns):
# Column Non-Null Count Dtype
--- ------ -------------- -----
0 speed 50 non-null int64
1 dist 50 non-null int64
dtypes: int64(2)
memory usage: 928.0 bytes
#导入matplotlib库
import matplotlib.pyplot as plt
#解决中文乱码问题
plt.rcParams["font.sans-serif"] = ['Microsoft YaHei']
#设置图框大小
plt.figure(figsize=(10,6))
#绘图
plt.scatter(cars.speed
,cars.dist
,color = "r"
,marker = "p"
,edgecolors="k"
)
#设置标题
plt.title("汽车速度与刹车距离的关系")
#设置x轴,y轴标题
plt.xlabel("速度")
plt.ylabel("刹车速度")
#显示图像
plt.show()
#导入对应数据
import pandas as pd
iris= pd.read_csv(r"D:\PythonFlie\python\pandas\pandas_exercise\exercise_data\iris.csv")
iris.head()
5.1 3.5 1.4 0.2 Iris-setosa
0 4.9 3.0 1.4 0.2 Iris-setosa
1 4.7 3.2 1.3 0.2 Iris-setosa
2 4.6 3.1 1.5 0.2 Iris-setosa
3 5.0 3.6 1.4 0.2 Iris-setosa
4 5.4 3.9 1.7 0.4 Iris-setosa
#修改列名
iris.rename(columns={'5.1':'sepal_length','3.5':'sepal_width','1.4':'petal_length','0.2':'petal_width','Iris-setosa':'classes'},inplace = True)
iris.head()
sepal_length sepal_width petal_length petal_width classes
0 4.9 3.0 1.4 0.2 Iris-setosa
1 4.7 3.2 1.3 0.2 Iris-setosa
2 4.6 3.1 1.5 0.2 Iris-setosa
3 5.0 3.6 1.4 0.2 Iris-setosa
4 5.4 3.9 1.7 0.4 Iris-setosa
#导入matplotlib库
import matplotlib.pyplot as plt
#解决中文乱码问题
plt.rcParams["font.sans-serif"] = ['Microsoft YaHei']
#设置图框大小
plt.figure(figsize=(10,6))
#绘图
plt.scatter(iris.sepal_length
,iris.sepal_width
,color = "b"
,marker = "o"
,edgecolors="k"
)
#设置标题
plt.title("萼片长度与萼片宽度的关系")
#设置x轴,y轴标题
plt.xlabel("萼片长度")
plt.ylabel("萼片宽度")
#显示图像
plt.show()
# 自定义颜色
colors = ['steelblue', '#9999ff', '#ff9999']# 三种不同的花品种
Species = iris.classes.unique()
#设置图框大小
plt.figure(figsize=(10,6))
# 通过循环的方式,完成分组散点图的绘制
for i in range(len(Species)):
plt.scatter(iris.loc[iris.classes == Species[i], 'petal_length']
,iris.loc[iris.classes == Species[i], 'petal_width']
,s = 35
,c = colors[i]
,label = Species[i]
)
# 添加轴标签和标题
plt.title('花瓣长度与宽度的关系')
plt.xlabel('花瓣长度')
plt.ylabel('花瓣宽度')
# 添加图例
plt.legend(loc = 'upper left')
# 显示图形
plt.show()
#导入matplotlib库
import matplotlib.pyplot as plt
#解决中文乱码问题
plt.rcParams["font.sans-serif"] = ['Microsoft YaHei']
# 构造数据
values = [3.2,2.1,3.5,2.8,3]
feature = ['个人能力','QC知识','解决问题能力','服务质量意识','团队精神']
import numpy as np
N = len(values)
# 设置雷达图的角度,用于平分切开一个圆面
angles=np.linspace(0, 2*np.pi, N, endpoint=False)
# 为了使雷达图一圈封闭起来,需要下面的步骤
values=np.concatenate((values,[values[0]]))
angles=np.concatenate((angles,[angles[0]]))
# 绘图
fig=plt.figure()
# 这里一定要设置为极坐标格式
ax = fig.add_subplot(111, polar=True)
# 绘制折线图
ax.plot(angles, values, 'o-', linewidth=2)
# 填充颜色
ax.fill(angles, values, alpha=0.25)
# 添加每个特征的标签
ax.set_thetagrids(angles * 180/np.pi,['个人能力','QC知识','解决问题能力','服务质量意识','团队精神','个人能力'])
# 设置雷达图的范围
ax.set_ylim(0,5)
# 添加标题
plt.title('活动前后员工状态表现')
# 添加网格线
ax.grid(True)
# 显示图形
plt.show()
#导入matplotlib库
import matplotlib.pyplot as plt
#解决中文乱码问题
plt.rcParams["font.sans-serif"] = ['Microsoft YaHei']
# 构造数据
values = [3.2,2.1,3.5,2.8,3]
values1 = [4,3.5,3,4,3.5]
feature = ['个人能力','QC知识','解决问题能力','服务质量意识','团队精神']
import numpy as np
N = len(values)
# 设置雷达图的角度,用于平分切开一个圆面
angles=np.linspace(0, 2*np.pi, N, endpoint=False)
# 为了使雷达图一圈封闭起来,需要下面的步骤
values=np.concatenate((values,[values[0]]))
values1=np.concatenate((values1,[values1[0]]))
angles=np.concatenate((angles,[angles[0]]))
# 绘图
fig=plt.figure()
# 这里一定要设置为极坐标格式
ax = fig.add_subplot(111, polar=True)
# 绘制折线图
ax.plot(angles, values, 'o-', linewidth=2,label = "活动前")
ax.plot(angles, values1, 'o-', linewidth=2,label = "活动后")
# 填充颜色
ax.fill(angles, values, alpha=0.25)
ax.fill(angles, values1, alpha=0.25)
# 添加每个特征的标签
ax.set_thetagrids(angles * 180/np.pi,['个人能力','QC知识','解决问题能力','服务质量意识','团队精神','个人能力'])
# 设置雷达图的范围
ax.set_ylim(0,5)
# 添加标题
plt.title('活动前后员工状态表现')
# 添加网格线
ax.grid(True)
#显示图例
plt.legend(loc = 'upper right')
# 显示图形
plt.show()
# 导入第三方模块
import pygal
# 调用Radar这个类,并设置雷达图的填充,及数据范围
radar_chart = pygal.Radar(fill = True, range=(0,5))
# 添加雷达图的标题
radar_chart.title = '活动前后员工状态表现'
# 添加雷达图各顶点的含义
radar_chart.x_labels = ['个人能力','QC知识','解决问题能力','服务质量意识','团队精神']
# 绘制两条雷达图区域
radar_chart.add('活动前', [3.2,2.1,3.5,2.8,3])
radar_chart.add('活动后', [4,4.1,4.5,4,4.1])
# 保存图像
radar_chart.render_to_file('radar_chart.svg')
stackplot(x,*args,**kargs)
#x指定面积图的x轴数据
#*args为可变参数,可以接受任意多的y轴数据,即各个拆分的数据对象
#**kargs为关键字参数,可以通过传递其他参数来修饰面积图,如标签、颜色
#可用的关键字参数:
#labels:以列表的形式传递每一块面积图包含的标签,通过图例展现
#colors:设置不同的颜色填充面积图
#首先来绘制折线图
#导入matplotlib库
import matplotlib.pyplot as plt
#解决中文乱码的问题
plt.rcParams["font.sans-serif"] = ['Microsoft YaHei']
#设置图框大小
plt.figure(figsize=(15,6))
#创建数据
x = ["一月","二月","三月","四月","五月","六月","七月","八月"]
y = [[31058,28121,32185,30133,30304,29934,31002,31590]
,[255802,179276,285446,309576,319713,320028,319809,331077]
,[52244,46482,59688,54728,55813,59054,57253,57583]]
labels = ["铁路","公路","水运"]
#绘图
for i in range(3):
plt.plot(x
,y[i]
,marker = 'o'
,linewidth = 2 # 设置线的宽度
,label=labels[i]
)
# 添加标题和坐标轴标签
plt.title('2017年各运输渠道的运输量')
plt.ylabel('运输量(万吨)')
#显示图例
plt.legend()
plt.show()
#设置图框大小
plt.figure(figsize=(15,6))
#创建数据
x = ["一月","二月","三月","四月","五月","六月","七月","八月"]
y = [[31058,28121,32185,30133,30304,29934,31002,31590]
,[255802,179276,285446,309576,319713,320028,319809,331077]
,[52244,46482,59688,54728,55813,59054,57253,57583]]
labels = ["铁路","公路","水运"]
# 定义各区块面积的含义
colors = ['#ff9999','#9999ff','#cc1234']
# 绘制面积图
plt.stackplot(x, # x轴
y[0],y[1],y[2], # 可变参数,接受多个y
labels = labels, # 定义各区块面积的含义
colors = colors # 设置各区块的填充色
)
# 添加标题和坐标轴标签
plt.title('2017年各运输渠道的运输量')
plt.ylabel('累积运输量(万吨)')
# 显示图例(即显示labels的效果)
plt.legend(loc = 'upper left')
# 显示图形
plt.show()
#导入第三方库
import pandas as pd
import numpy as np
import calendar
import datetime
#创建数据
d = {"date":pd.date_range(start='2021-09-01',periods=30)
,"high":[36,32,30,31,33,32,29,28,30,32
,26,28,29,25,26,28,29,29,18,33
,31,34,35,31,32,32,34,29,30,30]}
df = pd.DataFrame(d)
# 数据处理
# 由日期型数据衍生出weekday
df['weekday'] = df.date.apply(pd.datetime.weekday)
# 由日期型数据计算week_of_month,即当前日期在本月中是第几周
# 由于没有现成的函数,这里自定义一个函数来计算week_of_month
def week_of_month(tgtdate):
# 由日期型参数tgtdate计算该月的天数
days_this_month = calendar.mdays[tgtdate.month] # 通过循环当月的所有天数,找出第二周的第一个日期
for i in range(1, days_this_month + 1):
d = datetime.datetime(tgtdate.year, tgtdate.month, i)
if d.day - d.weekday() > 0:
startdate = d
break
# 返回日期所属月份的第一周
return (tgtdate - startdate).days //7 + 1
df['week_of_month'] = df.date.apply(week_of_month)
df.head()
date high weekday week_of_month
0 2021-09-01 36 2 0
1 2021-09-02 32 3 0
2 2021-09-03 30 4 0
3 2021-09-04 31 5 0
4 2021-09-05 33 6 0
# 构建数据表(日历)
target = pd.pivot_table(data = df.iloc[:,1:],values = 'high',
index = 'week_of_month', columns = 'weekday')
target
# 缺失值填充(不填充的话pcolor函数无法绘制)
target.fillna(0,inplace=True)
# 删除表格的索引名称
target.index.name = None
# 对索引排序(为了让“第一周”到“第五周”的刻度从y轴的高到底显示)
target.sort_index(ascending=False, inplace=True)
# 设置中文和负号正常显示
plt.rcParams['font.sans-serif'] = 'Microsoft YaHei'
plt.rcParams['axes.unicode_minus'] = False
plt.pcolor(target, # 指定绘图数据
cmap=plt.cm.Blues, # 指定填充色
edgecolors = 'white' # 指点单元格之间的边框色
)
# 添加x轴和y轴刻度标签(加0.5是为了让刻度标签居中显示)
plt.xticks(np.arange(7)+0.5,['周一','周二','周三','周四','周五','周六','周日'])
plt.yticks(np.arange(5)+0.5,['第五周','第四周','第三周','第二周','第一周'])
# 添加标题
plt.title('上海市2021年9月份每日最高气温分布图')
# 显示图形
plt.show()
import seaborn as sns
# 通过透视图函数形成绘图数据
target = pd.pivot_table(data = df.iloc[:,1:],values = 'high',
index = 'week_of_month', columns = 'weekday')
# 绘图
ax = sns.heatmap(target, # 指定绘图数据
cmap=plt.cm.Blues, # 指定填充色
linewidths=.1, # 设置每个单元方块的间隔
annot=True # 显示数值
)
# 添加x轴刻度标签(加0.5是为了让刻度标签居中显示)
plt.xticks(np.arange(7)+0.5,['周一','周二','周三','周四','周五','周六','周日'])
# 可以将刻度标签置于顶部显示
# ax.xaxis.tick_top()
# 添加y轴刻度标签
plt.yticks(np.arange(5)+0.5,['第一周','第二周','第三周','第四周','第五周'])
# 旋转y刻度0度,即水平显示
plt.yticks(rotation = 0)
# 设置标题和坐标轴标签
ax.set_title('上海市2021年9月份每日最高气温分布图')
ax.set_xlabel('')
ax.set_ylabel('')
# 显示图形
plt.show()
squarify.plot(sizes,
norm_x=100,
norm_y=100,
color=None,
label=None,
value=None,
alpha,
**kwargs)
#sizes:指定离散变量各水平对应的数值,即反映树地图子块的面积大小;
#norm_x:默认将x轴的范围限定在0-100之内;
#norm_y:默认将y轴的范围限定在0-100之内;
#color:自定义设置树地图子块的填充色;
#label:为每个子块指定标签;
#value:为每个子块添加数值大小的标签;
#alpha:设置填充色的透明度;
#**kwargs:关键字参数,与条形图的关键字参数类似,如设置边框色、边框粗细等;
# 导入第三方包
import squarify
import matplotlib.pyplot as plt
#中文及负号处理办法
plt.rcParams['font.sans-serif'] = 'Microsoft YaHei'
plt.rcParams['axes.unicode_minus'] = False
# 创建数据
name = ['国内增值税','国内消费税','企业所得税','个人所得税','进口增值税、消费税'
,'出口退税','城市维护建设税', '车辆购置税','印花税','资源税','土地和房税','车船税烟叶税等']
income = [3908,856,801,868,1361,1042,320,291,175,111,414,63]
#设置图表大小
plt.figure(figsize = (20,6))
# 绘图
colors = ['steelblue','#9999ff','red','indianred','green','yellow','orange']
plot = squarify.plot(sizes = income, # 指定绘图数据
label = name, # 指定标签
color = colors, # 指定自定义颜色
alpha = 0.6, # 指定透明度
value = income, # 添加数值标签
edgecolor = 'white', # 设置边界框为白色
linewidth =3 # 设置边框宽度为3
)
# 设置标签大小
plt.rc('font', size=15)
# 设置标题大小
plot.set_title('2017年8月中央财政收支情况',fontdict = {'fontsize':15})
# 去除坐标轴
plt.axis('off')
# 去除上边框和右边框刻度
plt.tick_params(top = 'off', right = 'off')
# 显示图形
plt.show()